Решение, которое я обычно использовал в этом сценарии, заключается в том, чтобы иметь проверку в модели (или в моем случае, как правило, в библиотеке проверки), но добавить ошибку в контроллере, которая позволяет вам отловить стандартную ошибку проверки, например:
public ActionResult Submit(String email)
{
string errorMessage = "";
if(Validation.IsValidEmail(email, out errorMessage))
{
ViewData.AddModelError("EmailAddress", "My Custom Error Message");
//or
ViewData.AddModelError("EmailAddress", errorMessage);
}
}
Возможно, это не совсем то, что вы ищете, но это может помочь вам найти способ максимизировать повторно используемый код, в то же время сохраняя возможность его настройки.
Раньше я делал это вот так - но я укусил пулю, и мои самые последние приложения повсеместно используют стандартные сообщения об ошибках - моя мотивация заключается в том, что пользователям все больше нравится короткое простое сообщение проверки, а имена полей не требуются в сообщение, если сообщение отображается внутри поля формы, а не в виде сводки. Это также позволяет мне помещать все мои правила / сообщения в аннотации данных, и я нахожу, что это работает удовольствие.