Как создать пользовательский атрибут валидации для MVC

StackOverflow https://stackoverflow.com/questions/2383669

Вопрос

Я хотел бы создать пользовательский атрибут валидации для MVC2 для адреса электронной почты, который не наследует от REGULAREXPPTIONTATTRIBUTE, но их можно использовать в проверке клиента. Может кто-то указать мне верное направление?

Я попробовал что-то так просто, как это:

[AttributeUsage( AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false )]
public class EmailAddressAttribute : RegularExpressionAttribute
{
    public EmailAddressAttribute( )
        : base( Validation.EmailAddressRegex ) { }
}

Но это не работает для клиента. Однако, если я использую Regularexpression (Vave.emailaddressRegex)], похоже, работает нормально.

Это было полезно?

Решение

Вам необходимо зарегистрировать адаптер для нового атрибута, чтобы включить проверку на стороне клиента.

Поскольку regularexpressionattribute уже имеет адаптер, который regularexpressionattributapter, все, что вам нужно сделать, это повторно повторно повторно.

Используйте статический конструктор, чтобы сохранить весь необходимый код в одном классе.

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple  = false)]
public class EmailAddressAttribute : RegularExpressionAttribute
{
    private const string pattern = @"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$";

    static EmailAddressAttribute()
    {
        // necessary to enable client side validation
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAddressAttribute), typeof(RegularExpressionAttributeAdapter));
    }

    public EmailAddressAttribute() : base(pattern)
    {
    }
}

Для получения дополнительной информации о проверке этого сообщения объясняют полный процесс.http://haacked.com/Archive/2009/11/19/aspnetmvc2-custom-validation.aspx.

Другие советы

Страница MSDN класса CustomValiveTationattribute Есть несколько примеров на нем сейчас. Фил Haacked Post устарел.

Посмотрите на универсальный валектор зависимого свойства в это статья

Вы пытались использовать аннотации данных?

Это мои аннотации проекта с использованием System.comPonentModel.dataNations;

public class IsEmailAddressAttribute : ValidationAttribute
{
  public override bool IsValid(object value)
  {
    //do some checking on 'value' here
    return true;
  }
}

Это в моих моделях проекта

namespace Models
{
    public class ContactFormViewModel : ValidationAttributes
    {
        [Required(ErrorMessage = "Please provide a short message")]
        public string Message { get; set; }
    }
}

Это мой контроллер

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContactUs(ContactFormViewModel formViewModel)
{
  if (ModelState.IsValid)
  {
    RedirectToAction("ContactSuccess");
  }

  return View(formViewModel);
}

Вам понадобится Google DataNationAntations, поскольку вам нужно схватить проект и компилировать его. Я бы сделал это, но мне нужно, чтобы выйти сюда надолго с конца.

Надеюсь это поможет.

РЕДАКТИРОВАТЬ

Нашел это как быстрый Google.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top