Проверка модели не работает с Razor Page & PageModel - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть страница 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 голосов
/ 04 мая 2019

Исправление для этого состоит в том, чтобы изменить

services.AddMvc();

на

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

в Startup.cs

Согласно https://github.com/aspnet/Mvc/issues/6790 это позволит вашему приложению включить это поведение.

...