2013-07-04 2 views
0

xml 구성에서 사용자 정의 속성을 첨부하고 싶습니다. 내가 모델을 만들 수 있습니다데이터 주석 및 xml의 사용자 정의 속성

public partial class User 
{ 
    public Nullable<int> UserId { get; set; } 

    public string UserName { get; set; } 

    public string Password { get; set; } 

    public Nullable<int> salary { get; set; } 
} 

[MetadataType(typeof(CUserAttributes))] 
public class Cuser : User 
{ 
    public Nullable<bool> IsRequire { get; set; } 
} 

//[Serializable] 
public class CUserAttributes 
{ 

    [Required] 
    public Nullable<bool> IsRequire { get; set; } 

    [Display(Name="My UserId")] 
    [RequiredIf(IsRequiredPropertyName = "IsRequire", ErrorMessage = "required.")] 
    public Nullable<int> UserId { get; set; } 

    [RequiredIf(IsRequiredPropertyName = "IsRequire", ErrorMessage = "required.")] 
    public string UserName { get; set; } 

    [RequiredIf(IsRequiredPropertyName = "IsRequire", ErrorMessage = "required.")] 
    public string Password { get; set; } 

    [RequiredIf(IsRequiredPropertyName = "IsRequire", ErrorMessage = "required.")] 
    public Nullable<int> salary { get; set; } 

} 

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 
public class RequiredIf : ValidationAttribute, IClientValidatable 
{ 
    public string IsRequiredPropertyName { get; set; } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     var isRequiredName = validationContext.ObjectInstance.GetType().GetProperty(this.IsRequiredPropertyName); 
     var isRequiredNameValue = isRequiredName.GetValue(validationContext.ObjectInstance, null); 

     if (isRequiredNameValue != null) 
     { 
      if (Convert.ToBoolean(isRequiredNameValue) == true) 
      { 
       if (value == null) 
       { 
        return new ValidationResult(this.ErrorMessage); 
       } 
      } 
     } 
     else if (isRequiredNameValue == null) 
     { 
      throw new Exception("RequiredIf property value is not found"); 
     } 
     return ValidationResult.Success; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     ModelClientValidationRule mcvr = new ModelClientValidationRule(); 
     mcvr.ValidationType = "requiredif"; 
     mcvr.ErrorMessage = this.ErrorMessage; 
     mcvr.ValidationParameters.Add("isrequiredpropertyname", this.IsRequiredPropertyName); 
     return new List<ModelClientValidationRule> { mcvr }; 
    } 

} 

, 클래스 다음 사용자 정의 속성 클래스 속성,하지만 지금은 주석 디스플레이, RequiredIf XML 구성에서 (사용자 정의 속성) 즉 그 데이터를 추가 할 수 있습니다.

답변