0

我想从 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 };
    }

}

我已经创建了模型、属性类,然后是自定义属性类,但现在我想从 XML 配置中添加这些数据注释,即 Display、RequiredIf(custom attribute)。

4

1 回答 1

0

可以从 xml 获取验证配置,您可以点击以下链接

http://www.primaryobjects.com/CMS/Article141.aspx

于 2013-07-16T08:09:55.030 回答