У меня есть страница 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
ModelState.IsValid
возвращает true при первой загрузке, но при отправке не букв, например.12345
или даже тарабарщины, например$&%*^@
страница ответила следующим сообщением:The field Message must match the regular expression '^[A-Za-z]*$'
иModelState.IsValid
возвращает false. Вы уже читали этот выпуск? - person Tetsuya Yamamoto   schedule 26.11.2018.SetCompatibilityVersion(CompatibilityVersion.Version
вStartUp
1);StartUp
, и теперь все работает. Хотели бы вы добавить его в качестве ответа? - person BanksySan   schedule 26.11.2018