Gui*_*sta 2 .net data-annotations asp.net-mvc-3
我的DomainRegistry模型具有以下属性:
[Domain("Extension")]
public string Name { get; set; }
[Required(ErrorMessage = "Select extension")]
public string Extension { get; set; }
Run Code Online (Sandbox Code Playgroud)
域是我的自定义数据注释,我已经IsValid尝试了方法中的所有内容以访问扩展属性内的值。
我的自定义数据注释中包含以下内容:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class DomainAttribute : ValidationAttribute
{
public string ExtensionProperty { get; set; }
public DominioAttribute(string property)
{
ExtensionProperty = property;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
var extension = (string) properties.Find(Propriedade, true).GetValue(value);
if (extension == null) return new ValidationResult("Extension shouldn't be null");
return null;
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法从IsValid方法内部的扩展获取值。有人对如何做到这一点有任何建议吗?另外,我需要将扩展名作为字符串值。
尝试这个:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var containerType = validationContext.ObjectInstance.GetType();
var field = containerType.GetProperty("Extension");
if (field != null)
{
var extensionValue = field.GetValue(validationContext.ObjectInstance, null);
return extensionValue != null ? ValidationResult.Success : new ValidationResult("Extension shouldn't be null", new[] { validationContext.MemberName });
}
return ValidationResult.Success;
}
Run Code Online (Sandbox Code Playgroud)