2013-07-04 72 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配置(自定义属性)的数据。

回答