Помощник тега asp-validation-for не работает при ошибках проверки на стороне сервера

CustomerEntryModel

    [Required]
    public String FirstName { get; set; }

CustomerController.cs

    [HttpGet]
    [Route("Get")]
    public IActionResult Get()
    {
        CustomerEntryModel model = new CustomerEntryModel();
        return View("CustomerEntry", model);
    }

    [HttpPost]
    [Route("Update")]
    public ActionResult Update([FromForm]CustomerEntryModel model)
    {
        if (!ModelState.IsValid)
        {
            return View("CustomerEntry", model);
        }
        return null;
    }

CustomerEntry.cshtml

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
<form asp-controller="Customer" asp-action="Update" method="post">
    <input type="text" asp-for="FirstName" />
    <span asp-validation-for="FirstName" />
    <input type="submit" value="Submit" />
</form>

Я не включаю библиотеки проверки jQuery, поэтому проверка выполняется на стороне сервера. Теперь, когда я отправляю страницу с пустым именем, выполняется действие обновления, и я получаю то же представление, но без ошибок.

Вместо помощника тега <span asp-validation-for="FirstName" />, если я использую помощник html @Html.ValidationMessageFor(m => m.FirstName), я получаю требуемую ошибку для имени.

Насколько я понимаю, TagHelper расширяет поведение традиционного HtmlHelper, чтобы обеспечить удобство разработки в HTML. Это означает, что то, что работает с HtmlHelper, должно работать со своим TagHelper аналогом.

После вызова ModelState.IsValid я МОГУ увидеть Controller.ModelState (экземпляр ModelStateDictionary) с ошибкой для свойства FirstName. Однако TagHelper не может его привязать.

Вы можете найти подробные сведения о помощниках тегов проверки MVC6 здесь,

http://www.davepaquette.com/archive/2015/05/14/mvc6-validation-tag-helpers-deep-dive.aspx.


person Mukesh Bhojwani    schedule 13.09.2016    source источник
comment
Это зарегистрированная проблема в структуре github.com/aspnet/Mvc/issues/4475   -  person Martin Brown    schedule 12.02.2017


Ответы (1)


Я предлагаю попробовать изменить это:

<span asp-validation-for="FirstName" />

нравится:

<span asp-validation-for="FirstName"></span>

может быть, это будет иметь значение

person Joe Audette    schedule 13.09.2016
comment
У меня та же проблема, что и у OP, и это не работает. - person João Pereira; 26.10.2016
comment
Да, как ни странно, проблема возникает из-за самозакрывающегося тега. - person Johan Gunawan; 13.04.2017
comment
лучший ответ дня;) - person Jeyhun Rahimov; 25.01.2019
comment
Удивительно, что это исправило это для меня. Какая разница? - person Brian Link; 13.10.2020