2012-06-11 2 views
2

Я пишу приложение mvc 3. Я должен сравнить два свойства. Например:Как создать собственный атрибут сравнения Атрибут для просмотра свойств модели

public class RenameCompare 
{ 
     public string OldName { get; set; } 
     public string NewName { get; set; } 
} 

И я хочу, чтобы создать атрибут, который должен быть обратный результат сравнения и в необходимом случае принять сообщение об ошибке. Поэтому в результате я хочу, чтобы ModelState возвращал true или false. Если свойства не равны, верните true ModelState.IsValid else верните false. Каждый может мне помочь ????

ответ

2

Я нашел решение. Здесь я создаю собственный атрибут NotEqual.

public class RenameCompare 
    { 

     public string OldName { get; set; } 

     [NotEqual(PropName="OldName", ErrorMessage="The oldname and new name are equal!")] 
     public string NewName { get; set; } 
    } 
    public class NotEqualAttribute : ValidationAttribute 
    { 
     public string PropName { get; set; } 


     protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
     { 
      PropertyInfo otherPropertyInfo = validationContext.ObjectType.GetProperty(PropName); 

      var otherPropertyStringValue = otherPropertyInfo.GetValue(validationContext.ObjectInstance, null).ToString(); 

      if (Equals(value.ToString(),otherPropertyStringValue)) 
      { 
       return new ValidationResult(FormatErrorMessage(validationContext.DisplayName)); 
      } 
      return null; 
     } 
    } 
Смежные вопросы