Вы говорите, ...
Так что я хотел бы подтвердить адрес, но не копировать код. Я также хотел бы не разбивать код из валидатора на еще один класс или это лучший способ?
ИМО, это лучший способ. Вынести общий код. Я вижу вашу проблему, хотя, наш EmailValidator наследуется от RegularExpressionValidator, поэтому его трудно выделить. У нас есть служебный класс RegEx, который использует тот же шаблон RegEx. Мы обращаемся к шаблону константой в обоих местах ...
public class EmailAttribute : RegularExpressionAttribute
{
public EmailAttribute() :
base(RegExUtility.SingleEmailAddressPattern)
{
ErrorMessage = "Please enter a valid email address";
}
и
public static class RegExUtility
{
public const SingleEmailAddressPattern = @"...";
public static bool IsValidSingleEmailAddress(string email)
{
return Regex.IsMatch(email, SingleEmailAddressPattern);
Для простых действий обратной передачи Ajax, я думаю, вы часто можете обработать это в контроллере или создать отдельную POCO ViewModel, которая просто поддерживает путь Ajax. Я знаю, что есть статьи об использовании одной и той же модели для обоих типов действий, но мы обнаружили, что обычно достаточно различий, поэтому стоит иметь отдельные модели представлений. Если они достаточно сложны, мы просто выделяем общий код.