【问题标题】:asp-validation-for tag helper is not working for server side validation errorsasp-validation-for 标签助手不适用于服务器端验证错误
【发布时间】:2017-01-20 17:06:00
【问题描述】:

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 验证库,因此验证发生在服务器端。现在,当我提交名字为空的页面时,更新操作被执行,我收到了相同的视图,但没有任何错误。

如果我使用 html 帮助器 @Html.ValidationMessageFor(m =&gt; m.FirstName) 而不是 &lt;span asp-validation-for="FirstName" /&gt; 标签助手,我会得到名字所需的错误。

据我了解,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

【问题讨论】:

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


【解决方案1】:

我建议尝试更改此设置:

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

像这样:

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

也许会有所作为

【讨论】:

  • 我遇到了和 OP 一样的问题,这不起作用。
  • 是的,令人惊讶的是,自闭标签会导致问题。
  • 当天最佳答案 ;)
  • 这为我解决了这个问题真是太神奇了。有什么区别?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
相关资源
最近更新 更多