【发布时间】: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 => m.FirstName) 而不是 <span asp-validation-for="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
【问题讨论】:
-
这是框架github.com/aspnet/Mvc/issues/4475的注册问题
标签: asp.net-core asp.net-core-mvc tag-helpers