Итак, первое, что я думаю, вызывает проблемы, это ваш метод расширения проверки. Он вызывает ValidationMessageFor, который является расширением MVC3 для помощника HTML, но с подписью, которая будет соответствовать передаче ему сообщения проверки:
public static MvcHtmlString ValidationMessageFor<TModel, TProperty>
(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage)
Исходя из вашего кода, я фактически ожидал бы, что сообщение об ошибке будет именем класса CSS в вашем ресурсе на основе этого фрагмента из того, как генерируется <span>
:
if (!String.IsNullOrEmpty(validationMessage)) {
builder.SetInnerText(validationMessage);
}
else if (modelError != null) {
builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState));
}
Так что вы, вероятно, захотите изменить свое расширение на что-то вроде (если оно не отменяется):
public static MvcHtmlString Validation<T>(this HtmlHelper<T> helper, Expression<Func<T, string>> expression)
{
return helper.ValidationMessageFor(expression, null, null, new { _class = Resources.Constants.ModelValidationMessageCssClass });
}
Суть в том, что я не думаю, что FluentValidation имеет какое-либо отношение к сгенерированной разметке - она должна только передавать ваши ошибки валидации в ModelState, а ASP.NET MVC делает все остальное. Если вы хотите получить еще больший контроль, вы можете просто написать свой собственный конструктор HTML-тегов ; Я взял большую часть этого из источника MVC3 , чтобы вы могли следовать их шаблонам или пойти другим путем. Вы также можете обратиться к источнику FluentValidation для получения дополнительной информации.