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

时间:2016-09-13 07:17:07

标签: asp.net-core asp.net-core-mvc tag-helpers

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

1 个答案:

答案 0 :(得分:14)

我建议尝试更改此内容:

<span asp-validation-for="FirstName" />
像这样:

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

也许它会有所作为