来自服务层的ASP.NET MVC客户端验证

时间:2012-07-09 18:42:37

标签: asp.net-mvc validation model-view-controller service-layer

我正在关注这篇文章

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

知道该怎么做吗?

2 个答案:

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