0

我在关注这篇文章

http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validating-with-a-service-layer-cs

在我的 ASP.NET MVC Web 应用程序中包含一个带有业务逻辑的服务层。

我能够将消息从服​​务层传递到Html.ValidationSummary使用ModelState类中的视图模型。

我在 View Model 上执行基本的验证逻辑(使用DataAnnotation属性),ClientValidation默认情况下我已启用,它会在我的表单的每个字段上显示错误消息。

来自服务层的业务逻辑错误消息Html.ValidationSummary仅在将表单发布到服务器后才会显示。

从服务层验证后,我想突出显示一个或多个字段,并在这些字段上显示来自服务层的消息,而不是Html.ValidationSummary.

知道怎么做吗?

4

2 回答 2

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>
}
于 2012-07-09T21:13:57.347 回答
0

感谢达林,我找到了解决问题的方法。

详细说明:

我可以用

 _validatonDictionary.AddError("Name of my field", "Custom message")

所以我可以显示一条消息并突出显示该特定字段(使用 DataAnnotation 非常简单)。

如果我只想在 ValidationSummary 中显示一条消息而不突出显示我使用的特定字段

_validatonDictionary.AddError(string.Empty, "Custom message")

请注意string.Empty

于 2012-07-10T08:02:49.140 回答