Нет встроенного способа сделать это.Насколько я помню, он был намеренно оставлен разработчиками MVC, потому что они полагали, что это приведет к загроможденному пользовательскому интерфейсу.Также вводится вопрос «Как бы вы хотели, чтобы они выводились?
Так что вам нужно было бы создать свой собственный вспомогательный метод, который может легко основываться на ValidationMessageFor
, например - объединить все ошибкисообщения, разделенные запятыми (непроверенные, только для концепции):
public static class ValidationHelpers
{
public static MvcHtmlString MultiValidationMessageFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes = null
)
{
var propertyName = ModelMetadata.FromLambdaExpression(
expression, htmlHelper.ViewData).PropertyName;
var modelState = htmlHelper.ViewData.ModelState;
if (modelState.ContainsKey(propertyName) &&
modelState[propertyName].Errors.Count > 1)
{
// We have multiple error messages
string messages = String.Join(", ",
modelState[propertyName].Errors.Select(e => e.ErrorMessage)
);
// Reuse the built-in helper that takes a string as the message:
return htmlHelper.ValidationMessageFor(
expression,
messages,
htmlAttributes as IDictionary<string, object> ?? htmlAttributes
);
}
// We only have a single message, so just call the standard helper
return htmlHelper.ValidationMessageFor(
expression,
null,
htmlAttributes as IDictionary<string, object> ?? htmlAttributes
);
}
}
Или вы можете сделать полное сообщение проверки <span>
для каждого (также непроверенного):
// Only the multiple error case changes from the version above:
if (modelState.ContainsKey(propertyName) &&
modelState[propertyName].Errors.Count > 1)
{
StringBuilder builder = new StringBuilder();
// Build a complete validation message for each message
foreach (ModelError error in modelState[propertyName].Errors)
{
builder.Append(
htmlHelper.ValidationMessageFor(
expression, error.ErrorMessage, htmlAttributes
)
);
}
return MvcHtmlString.Create(builder.ToString());
}