0

Я следую за эту статьюASP.NET MVC клиент проверка от Service Layer

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

включить Service Layer с бизнес-логики в моем ASP.NET MVC веб-приложение.

Я могу передавать сообщения с уровня обслуживания на модель просмотра в Html.ValidationSummary с использованием класса ModelState.

я выполнить основную логику проверки наПредставление модели (с использованием DataAnnotation атрибутов), и я ClientValidation включена по умолчанию, которые отображаются сообщения об ошибке на каждое поле моей формы.

Сообщение об ошибке бизнес-логики, которое поступает с уровня обслуживания, отображается на Html.ValidationSummary только после отправки формы на сервер.

После проверки с уровня обслуживания я хотел бы выделить одно или несколько полей и получить сообщение из уровня сервиса, отображаемого в этих полях, а не Html.ValidationSummary.

Любая идея, как это сделать?

ответ

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> 
} 
+0

Спасибо Дарина, Ваш ответ поможет мне много спасибо! – GibboK

0

Спасибо Дарин Я нашел решение своих проблем.

В деталях:

я могу использовать

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

так что я могу показать сообщение и подчеркнуть, что конкретное поле (очень просто сделать с DataAnnotation).

В случае, если я хочу отобразить только сообщение ValidationSummary без подсветки конкретного поля я использую

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

Пожалуйста, обратите внимание на string.Empty

Смежные вопросы