我在我的MVC 5应用程序中呈现验证摘要,如下所示:
@Html.Partial("_ValidationSummary", @ViewData.ModelState)
,部分视图代码如下:
@model ModelStateDictionary
<div class="@(Html.ViewData.ModelState.IsValid ? "validation-summary-valid" : "validation-summary-errors") panel panel-danger"
data-valmsg-summary="true">
<div class="panel-heading">
Please, correct the following errors:
</div>
<div class="panel-body">
<ul>
@foreach (var modelError in Model.SelectMany(keyValuePair => keyValuePair.Value.Errors))
{
<li>@modelError</li>
<li>@modelError.ErrorMessage</li>
}
</ul>
</div>
</div>
这非常有效 - 因为显示错误字段的错误消息。
但是 - 未添加错误模型上的字段名称 - 因此我有一个移动电话号码字段以及家庭电话和工作电话。如果我将abc放入每个字段然后在我的验证摘要中我收到3条错误消息,说"Phone Number is Invalid"
但我想将该字段添加到错误消息中,以便我可以将该消息添加到用户将知道哪个字段出错?
有没有一种简单的方法来调整我当前的代码来实现这一目标?
答案 0 :(得分:1)
您可以使用ViewData中的ModelMetaData来检索密钥的显示名称:
@foreach (var key in ViewData.ModelState.Keys)
{
var modelState = ViewData.ModelState[key];
var property = ViewData.ModelMetadata.Properties.FirstOrDefault(p => p.PropertyName == key);
if (property != null)
{
var displayName = property.DisplayName;
foreach (var error in modelState.Errors)
{
<li>@displayName: @error.ErrorMessage</li>
}
}
else
{
foreach (var error in modelState.Errors)
{
<li>@error.ErrorMessage</li>
}
}
}
确保添加
@using System.Linq
位于视图的顶部。
您还可以使用<label>
允许用户点击显示名称以自动聚焦输入字段:
<li><label for="@key">@displayName</label>: @error.ErrorMessage</li>
答案 1 :(得分:0)
您可以尝试以下LINQ
查询
foreach (var modEr in ModelState.Select(st => new { Field = st.Key, Errors = st.Value.Errors.Select(er => er.ErrorMessage) }))
{
//modEr.Field //Field name
//modEr.Errors //List of errors
}
此外,还有一个MVC定义的HTML助手来显示验证摘要,参考 http://msdn.microsoft.com/en-us/library/system.web.mvc.html.validationextensions.validationsummary(v=vs.118).aspx
答案 2 :(得分:0)
您可以对模型中的每个字段使用数据注释。