为什么需要asp-validation-for和@ Html.ValidationMessage()?

时间:2016-11-04 16:58:22

标签: c# asp.net-mvc validation razor

我正在.Net核心上查看Asp.Net Core。脚手架已经创建了一些模板。模型的默认验证是不够的,所以当对象发送到控制器时我添加了一些额外的验证

ViewData.ModelState.AddModelError(nameof(Invoice.InvoiceNr), "Invoice number should be unique.");

现在在浏览器中,我只在@Html.ValidationMessage("InvoiceNr")添加到cshtml文件时看到该消息。只有asp-validation-for="InvoiceNr"似乎没有出现任何属性错误。

我想出来之前花了一些时间。有人可以说明为什么会这样,对我来说似乎反直觉,必须添加2行来显示所有验证错误。

谢谢!

@Shyju

    <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>

@GSerg enter image description here

1 个答案:

答案 0 :(得分:4)

它无法正常工作的原因是您没有正确使用v alidation-for标记帮助程序。您应该使用显式关闭跨度而不是使用自闭合符号。

替换

<span asp-validation-for="InvoiceNr" class="text-danger" />

使用

<span asp-validation-for="InvoiceNr" class="text-danger"></span>

简而言之,您不需要同时使用标记帮助程序和html帮助程序来验证错误。正确使用标记帮助程序后,您将能够看到验证错误消息。