我有一个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
设置为什么或根本不添加它。
NB Message
已正确填充。
NB 2 不能添加[Required(AllowEmptyStrings = false)]
或将[FromQuery]
替换为[BindProperty(SupportsGet = true)]
都会改变行为。
为什么我的注释无效?
我在这里共享了整个项目:https://1drv.ms/u/s!Au6otEu-6FtC2VFoLNCTDydGUSIR
答案 0 :(得分:0)
此问题的解决方法是更改
services.AddMvc();
到
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
在Startup.cs
根据https://github.com/aspnet/Mvc/issues/6790,这将使您的应用程序启用此行为。