C# 为什么asp验证和@Html.ValidationMessage()都是必需的?
我正在.NETCore上签出Asp.NETCore。脚手架已经创建了一些模板。模型的默认验证是不够的,所以我在将对象发送到控制器时添加了一些额外的验证C# 为什么asp验证和@Html.ValidationMessage()都是必需的?,c#,asp.net-mvc,validation,razor,C#,Asp.net Mvc,Validation,Razor,我正在.NETCore上签出Asp.NETCore。脚手架已经创建了一些模板。模型的默认验证是不够的,所以我在将对象发送到控制器时添加了一些额外的验证 ViewData.ModelState.AddModelError(nameof(Invoice.InvoiceNr),“发票号应该是唯一的。” 现在在浏览器中,我只在将@Html.ValidationMessage(“InvoiceNr”)添加到cshtml文件时才看到该消息。只有asp validation for=“InvoiceNr”似乎
ViewData.ModelState.AddModelError(nameof(Invoice.InvoiceNr),“发票号应该是唯一的。”代码>
现在在浏览器中,我只在将@Html.ValidationMessage(“InvoiceNr”)
添加到cshtml文件时才看到该消息。只有asp validation for=“InvoiceNr”
似乎没有出现任何属性错误
我花了一些时间才弄明白。有人能解释一下为什么我觉得必须添加两行来显示所有验证错误是违反直觉的
谢谢
@仙居
<div class="form-group">
<label asp-for="InvoiceNr" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="InvoiceNr" class="form-control"/>
<span asp-validation-for="InvoiceNr" class="text-danger" />
</div>
</div>
@格斯伯格
它不起作用的原因是您没有正确使用
标记帮助器的v验证。您不应该使用自动关闭符号,而应该对跨度使用显式关闭
替换
<span asp-validation-for="InvoiceNr" class="text-danger" />
与
简而言之,您不需要同时使用标记帮助器和html帮助器来解决验证错误。正确使用标记帮助器后,您将能够看到验证错误消息。它不起作用的原因是您没有正确使用标记帮助器的v验证。您不应该使用自动关闭符号,而应该对跨度使用显式关闭
替换
<span asp-validation-for="InvoiceNr" class="text-danger" />
与
简而言之,您不需要同时使用标记帮助器和html帮助器来解决验证错误。正确使用tag helper后,您将能够看到验证错误消息。您可以在视图中共享如何尝试asp验证吗?您可以在视图中共享如何尝试asp验证吗?确实可能重复。这使我困惑。在我看来,脚手架似乎没有产生一个非常有用的模板。非常感谢您的快速帮助@Mikedklerk如果这确实是脚手架产生的,那么它必须被报告为一个bug(参见)。这使我困惑。在我看来,脚手架似乎没有产生一个非常有用的模板。非常感谢您的快速帮助@Mikedklerk如果这确实是脚手架产生的,那么必须将其报告为bug(请参阅)。