Интересный сценарий. Если я вас правильно понимаю: вы хотели бы проверить сообщение сложной формы и, если оно недействительно, верните их в представление и отобразите сообщения об ошибках над соответствующими областями формы. Причина, по которой вы не можете использовать <% = Html.ValidationSummary ()%>, заключается в том, что вам нужны разные сводки для разных областей формы в зависимости от того, что является действительным, а что нет?
Возьмите его с крошкой соли, но я бы написал собственный HtmlHelper для каждой области формы или части. Вы можете основать свой пользовательский код на текущей реализации Html.ValidationSummary и найти код здесь . В каждой пользовательской сводке проверки вы можете искать конкретные ошибки в ModelState и отображать их. У меня мало времени и я не тестировал, но это может помочь вам начать:
public static class CustomValidationExtensions
{
public static string CustomValidationSummary(this HtmlHelper htmlHelper)
{
if (!htmlHelper.ViewData.ModelState.ContainsKey("YourFormName"))
return null;
ModelState modelState = htmlHelper.ViewData.ModelState["YourFormName"];
ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0];
if (modelError == null)
return null;
TagBuilder builder = new TagBuilder("span");
builder.MergeAttribute("class", HtmlHelper.ValidationMessageCssClassName);
builder.SetInnerText(modelError.ErrorMessage);
return builder.ToString(TagRenderMode.Normal);
}
}
Это проверяет только один элемент ModelState и отображает html. Вы захотите добавить все свои элементы ModelState вручную или зациклить коллекцию и отобразить только те сообщения об ошибках, которые относятся к этому частичному представлению. В любом случае, я считаю, что вам лучше всего добавлять ошибки в ModelState обычным способом и работать напрямую с ModelState, чтобы отображать только ошибки, относящиеся к этой части. И, конечно, вы можете манипулировать html и делать с выводом все, что пожелаете.