Asp.net MVC 3 Условная проверка с DataAnnotations - PullRequest
7 голосов
/ 11 августа 2011

Я использую Asp.net MVC 3, сталкиваюсь с проблемой проверки с аннотациями данных, как показано ниже

Мы сохранили модель в отдельном проекте библиотеки, иерархия классов модели теперь выглядит как

public class EditAlternateMailingAddressModel : BaseModel
{
    public UserAddressDetails AlternateAddressDetails { get; set; }

    public List<UsState> StateList { get; set; }        
}

userAddressDetails определяется как показано ниже

 public partial class UserAddressDetails 
    {  
      public string DeliveryLine { get; set; }
      public string Zip { get; set; }
      public bool IsDefaultMailingAddress { get; set; }        
    }

логика проверки определена в отдельном классе, как показано ниже

[MetadataType(typeof(UserAddressDetailsMetaData))]
public partial class UserAddressDetails
{
    private class UserAddressDetailsMetaData
   {

      [Required(ErrorMessage = "Please enter address.")]
       public string DeliveryLine { get; set; }

       [Required(ErrorMessage = "Please enter city.")]
      public string City { get; set; }
        public bool IsDefaultMailingAddress { get; set; 
}

в режиме редактирования, DeliveryLine, Zip зависят от IsDefaultMailingAddress, так как эти поля должныбудет предоставлено, если IsDefaultMailingAddress имеет значение true, в противном случае разрешите отправку формы.

для открытия и частичной отправки форм, которые мы используем jQuery.

Мы уже пробовали ниже http://andrewtwest.com/2011/01/10/conditional-validation-with-data-annotations-in-asp-net-mvc/ http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx

но эти проверки выполняются на стороне сервера, мы должны заставить его работать на стороне клиента.

1 Ответ

2 голосов
/ 12 августа 2011

Вы должны создать свой собственный атрибут ValidationAttribute. Если вам нужна проверка клиента, ваш атрибут должен реализовывать интерфейс IClientValidatable, и вы должны написать собственный клиентский валидатор.

Обновлено : добавлены примеры кода

Реализация валидатора:

public class CustomRequiredAttribute : ValidationAttribute, IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        // your validation logic here
        return ValidationResult.Success;
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        return new[] {new CustomRequiredValidationRule (ErrorMessage)};
    }
}

public class CustomRequiredValidationRule : ModelClientValidationRule
{
    public RequiredIfVisibleValidationRule(string errorMessage)
    {
        ValidationType = "customRequire";
        ErrorMessage = errorMessage;
    }
}

Добавление валидатора на стороне клиента:

(function ($) {
    $.validator.addMethod('customRequire', function (value, element) {
        // your validation logic here
        return true; // true if valid, otherwise false 
    });
    $.validator.unobtrusive.adapters.add('customRequire');
})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...