模型验证不适用于 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 这将允许您的应用程序启用此行为。