asp-validation-for 标记助手不适用于服务器端验证错误

asp-validation-for tag helper is not working for server side validation errors

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.ModelStateModelStateDictionary 的实例),出现 FirstName 属性 的错误。但是,TagHelper 无法绑定它。

您可以在此处找到 MVC6 验证标签助手的详细信息,

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

我建议尝试更改此设置:

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

像这样:

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

也许会有所作为