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

Muk*_*ani 4 asp.net-core-mvc tag-helpers asp.net-core

CustomerEntryModel

    [Required]
    public String FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

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;
    }
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我没有包含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

Joe*_*tte 16

我建议尝试改变这个:

<span asp-validation-for="FirstName" />
Run Code Online (Sandbox Code Playgroud)

像这样:

<span asp-validation-for="FirstName"></span>
Run Code Online (Sandbox Code Playgroud)

也许它会有所作为

  • 我遇到与OP相同的问题,但这不起作用. (3认同)