模型验证不适用于 Razor Page 和 PageModel
Model validation not working with Razor Page & PageModel
我有一个 Razor 页面,它有一个打印错误消息的标签,还打印了 ModelState.IsValid
的值。
@page
@model IndexModel
<form asp-page="Index" method="get">
<input asp-for="Message"/>
<span asp-validation-for="Message"></span>
<input type="submit" value="Submit"/>
</form>
<p>ModelState.IsValid = @Model.ModelIsValid</p>
PageModel 使用正则表达式要求进行注释:
public class IndexModel : PageModel
{
[FromQuery]
[RegularExpression("^[A-Za-z]*$")]
public string Message { get; set; }
public bool ModelIsValid { get; private set; }
public void OnGet()
{
ModelIsValid = ModelState.IsValid;
}
}
尽管我将 Message
设置为什么或根本不添加它,但该模型始终有效。
注意 Message
已正确填充。
注意 2 添加 [Required(AllowEmptyStrings = false)]
或将 [FromQuery]
替换为 [BindProperty(SupportsGet = true)]
都不会改变行为。
为什么我的注释没有效果?
我在这里分享了完整的项目:https://1drv.ms/u/s!Au6otEu-6FtC2VFoLNCTDydGUSIR
解决此问题的方法是更改
services.AddMvc();
至
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
在Startup.cs
根据 https://github.com/aspnet/Mvc/issues/6790 这将允许您的应用程序启用此行为。
我有一个 Razor 页面,它有一个打印错误消息的标签,还打印了 ModelState.IsValid
的值。
@page
@model IndexModel
<form asp-page="Index" method="get">
<input asp-for="Message"/>
<span asp-validation-for="Message"></span>
<input type="submit" value="Submit"/>
</form>
<p>ModelState.IsValid = @Model.ModelIsValid</p>
PageModel 使用正则表达式要求进行注释:
public class IndexModel : PageModel
{
[FromQuery]
[RegularExpression("^[A-Za-z]*$")]
public string Message { get; set; }
public bool ModelIsValid { get; private set; }
public void OnGet()
{
ModelIsValid = ModelState.IsValid;
}
}
尽管我将 Message
设置为什么或根本不添加它,但该模型始终有效。
注意 Message
已正确填充。
注意 2 添加 [Required(AllowEmptyStrings = false)]
或将 [FromQuery]
替换为 [BindProperty(SupportsGet = true)]
都不会改变行为。
为什么我的注释没有效果?
我在这里分享了完整的项目:https://1drv.ms/u/s!Au6otEu-6FtC2VFoLNCTDydGUSIR
解决此问题的方法是更改
services.AddMvc();
至
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
在Startup.cs
根据 https://github.com/aspnet/Mvc/issues/6790 这将允许您的应用程序启用此行为。