模型验证不适用于Razor Page和PageModel

时间:2018-11-25 22:10:06

标签: .net razor asp.net-core razor-pages

我有一个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

1 个答案:

答案 0 :(得分:0)

此问题的解决方法是更改​​

services.AddMvc();

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

Startup.cs

根据https://github.com/aspnet/Mvc/issues/6790,这将使您的应用程序启用此行为。