asp.net-core – asp-validation-for tag helper不适用于服务器端验证错误

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”/> tag helper,如果我使用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

最佳答案
我建议尝试改变这个:

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

像这样:

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

也许它会有所作为

转载注明原文:asp.net-core – asp-validation-for tag helper不适用于服务器端验证错误 - 代码日志