2010-01-23 3 views
3

Я использую ASP.NET MVC и реализую выборочную проверку с помощью пользовательских атрибутов/аннотаций данных на своих моделях.Получить класс класса, затем получить доступ к его свойствам внутри настраиваемого атрибута

Возможно ли получить доступ к свойству в родительском классе объекта внутри моего настраиваемого атрибута?

public class MyModel 
{ 
    [MyCustomValidator] 
    public string var1 {get; set;} 
    public string var2 {get; set;} 
} 

Примечание: Использование ASP.NET MVC

public class MyCustomValidatorAttribute : ValidationAttribute 
{ 
    public bool override IsValid(Object value) 
    { 
      // somehow get access to var2 in the MyModel 
    } 
} 

Так в основном, делая проверки проверить еще одно свойство для конкретного значения. Я попытался передать значение var2 в качестве параметра MyCustomValidator, но это не сработает.

+0

Обновлен ответ re Ваш комментарий –

ответ

1

Очевидно, MVC 2 Проверка не поддерживает validationContext, поскольку MVC 2 предназначает DA 3.5. Я не уверен, если это все-таки в случае с MVC 2 RC, я использую VS 2010 с MVC 2 Preview 1.

Взято из поста Брэда Уилсона в http://forums.asp.net/p/1457591/3650720.aspx

Там нет контекста проверки в версии 3.5A версии DataSnnotations, которая является целью MVC 2. [CustomValidation] атрибут также артефакт DA4.0, так чтобы написать пользовательскую проверку, вам необходимо создать новый атрибут проверки, полученный из ValidationAttribute

3

Нет, в основном. После охоты через отражатель вы получаете доступ только к значениям проверяемого участника - не содержащему объект или даже член-информации свойства/поля/независимо.

Что я согласен это очень ограничивает и разочарование, но это выглядит как это зафиксировано в 4.0 - мой предыдущий ответ намекнул на это, но в 4.0 есть IsValid перегрузка, которая принимает ValidationContext, который обеспечивает эту детали с помощью ObjectInstance.

+0

Не ссылается ли объект ObjectInstance на объект, украшенный указанным атрибутом? Кроме того, я не могу переопределить Validate, он не отображается. Отображается только IsValid (значение объекта). – Omar

+0

Замечание: Использование asp.net mvc – Omar

+0

@Baddie - я еще раз рассмотрю ... –

0

Только примечание, чтобы сказать, что вы можете сделать это с MVC3 :

public class MyCustomValidatorAttribute : ValidationAttribute 
{ 
    public bool override IsValid(Object value) 
    { 
      var model = validationContext.ObjectInstance as MyModel; 
      // would probably use reflection and pass property names instead of casting in real life 

      if (model.var2 != null && value == null) 
      { 
      return new ValidationResult("var1 is required when var2 is set"); 
      } 

      return ValidationResult.Success; 
    } 
}