Пользовательские Аннотирования данных IsValid никогда не вызываются. (.NET ASP.NET MVC 2 4)

У меня есть пользовательский Атрибут Подтверждения правильности данных, который я создал для проверки паролей, вводы данных пользователем являются тем же, но IsValid никогда не вызывается.

Пользовательский атрибут:

public class IsSameAsAttribute : ValidationAttribute
{
    public String TargetProperty { get; set; }
    private readonly object _typeId = new object();

    public IsSameAsAttribute(string targetProperty)
    {
        TargetProperty = targetProperty;
    }

    public override bool IsValid(object value)
    {
        return false;
        //Type objectType = value.GetType();
        //bool isValid = false;

        //PropertyInfo[] neededProperties =
        //    objectType.GetProperties().Where(propertyInfo => propertyInfo.Name == TargetProperty).ToArray();

        //return isValid;
    }

    public override object TypeId
    {
        get { return _typeId; }
    }
}

Модель данных к этому относятся:

public class RegistrationData
{
    [Required(ErrorMessage = "First Name Required")]
    [StringLength(100, ErrorMessage = "First Name must be 100 characters or less.")]
    public String FirstName { get; set;}

    [Required(ErrorMessage = "Last Name Required")]
    [StringLength(100, ErrorMessage = "Last Name must be 100 characters or less.")]
    public String LastName { get; set; }

    [Required(ErrorMessage = "Email is Required")]
    [StringLength(200, ErrorMessage = "Email must be 200 characters or less.")]
    [RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "Valid Email Address is required.")]
    public String Email { get; set; }

    [Required(ErrorMessage = "Password is required")]
    public String Password { get; set; }

    [IsSameAs("Password")]
    public String PasswordRepeat { get; set; }

    [Required(ErrorMessage = "Division is required")]
    public String Division { get; set; }

}

И Контроллер, откуда это называют:

[HttpPost]
public ActionResult ValidationDemo(RegistrationData model)
{
    if (ModelState.IsValid)
    {
        return Redirect("/");
    }

    return View(model);
}

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

Что продолжается и как я фиксирую его?

ОБНОВЛЕНИЕ

Хорошо я играл некоторые и если я называю TryUpdateModel (модель) в моем контроллере, это наконец вызывает IsValid. Таким образом, это подразумевает мне, что мой пользовательский атрибут не становится "зарегистрированным" в любых выполнениях проверки в MVC 2. Существует ли способ обратиться к этому?

[HttpPost]
public ActionResult ValidationDemo(RegistrationData model)
{
    TryValidateModel(model);  // <--- *** Added this line and it "works"

    if (ModelState.IsValid)
    {
        return Redirect("/");
    }

    return View(model);
}
7
задан Jack 29 June 2010 в 22:13
поделиться

1 ответ

Вы пытались заполнить все остальные поля, чтобы все готовые проверки были выполнены, и посмотреть, запускается ли ваша настраиваемая проверка? Если проверка клиента не удовлетворена, форма не сможет быть отправлена ​​обратно, и, таким образом, ваша настраиваемая проверка на стороне сервера не будет запущена,

Чтобы ваш настраиваемый атрибут проверки работал на стороне клиента, необходимо выполнить некоторую дополнительную работу. сделал.

Прочтите отличный пост Фила о валидации здесь: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

0
ответ дан 7 December 2019 в 16:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: