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.ModelState
(ModelStateDictionary
的实例),FirstName
属性有错误。但是,TagHelper
无法绑定它。
您可以在此处找到MVC6验证标记帮助详细信息,
http://www.davepaquette.com/archive/2015/05/14/mvc6-validation-tag-helpers-deep-dive.aspx
答案 0 :(得分:14)
我建议尝试更改此内容:
<span asp-validation-for="FirstName" />
像这样:
<span asp-validation-for="FirstName"></span>
也许它会有所作为