我正在关注这篇文章
http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validating-with-a-service-layer-cs
在我的ASP.NET MVC Web应用程序中包含带有业务逻辑的服务层。
我可以使用Html.ValidationSummary
类在ModelState
中将消息从服务层传递到视图模型。
我在视图模型上执行基本验证逻辑(使用DataAnnotation
属性),默认情况下启用ClientValidation
,在表单的每个字段上显示错误消息
只有在将表单发布到服务器后,才会在Html.ValidationSummary
上显示来自服务层的业务逻辑错误消息。
在从服务层验证后,我想突出显示一个或多个字段,并在这些字段中显示来自服务层的消息,而不是Html.ValidationSummary
。
知道该怎么做吗?
答案 0 :(得分:2)
以下是验证在服务器上的显示方式:
protected bool ValidateProduct(Product productToValidate)
{
if (string.IsNullOrEmpty(productToValidate.Name))
_validatonDictionary.AddError("Name", "Name is required.");
if (string.IsNullOrEmpty(productToValidate.Description))
_validatonDictionary.AddError("Description", "Description is required.");
if (productToValidate.UnitsInStock < 0)
_validatonDictionary.AddError("UnitsInStock", "Units in stock cannot be less than zero.");
return _validatonDictionary.IsValid;
}
您所要做的就是为视图中的这些字段提供相应的ValidationMessageFor
帮助程序,来自服务器的错误消息将与相应的字段相关联:
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(x => x.Name)
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
</div>
<div>
@Html.LabelFor(x => x.Description)
@Html.EditorFor(x => x.Description)
@Html.ValidationMessageFor(x => x.Description)
</div>
<button type="submit">Create</button>
}
答案 1 :(得分:0)
感谢Darin,我找到了解决问题的方法。
详情:
我可以用
_validatonDictionary.AddError("Name of my field", "Custom message")
所以我可以显示一条消息并突出显示该特定字段(使用DataAnnotation非常简单)。
如果我想在ValidationSummary中只显示一条消息而不突出显示我使用的特定字段
_validatonDictionary.AddError(string.Empty, "Custom message")
请注意string.Empty