ash*_*raf 9 silverlight asp.net-mvc .net-4.0 buddy-class data-annotations
DataAnnotations不适用于伙伴类.以下代码始终验证为true.为什么?
var isValid = Validator.TryValidateObject(new Customer(),Context,results,true);
这是好友班.
public partial class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}
[MetadataType(typeof(CustomerMetaData))]
public partial class Customer
{
public class CustomerMetaData
{
[Required(ErrorMessage = "You must supply a name for a customer.")]
public string Name { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是另一个有相同问题的主题,但没有答案. 链接文字
Jer*_*ald 29
我在这里找到答案:http://forums.silverlight.net/forums/p/149264/377212.aspx
MVC识别MetaDataType属性,但其他项目则不识别.在验证之前,您需要手动注册元数据类:
TypeDescriptor.AddProviderTransparent(
new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Customer), typeof(CustomerMetadata)), typeof(Customer));
var isValid = Validator.TryValidateObject(new Customer(), context, results, true);
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我找不到任何原因,如果我使用 MetadataType(伙伴类),TryValidateObject 总是返回 true。但它适用于以下代码(xVal)。
public static IEnumerable<ErrorInfo> GetErrors(object instance, string name)
{
var metadataAttrib = instance.GetType()
.GetCustomAttributes(typeof(MetadataTypeAttribute), true)
.OfType<MetadataTypeAttribute>().FirstOrDefault();
var buddyClassOrModelClass = metadataAttrib != null
? metadataAttrib.MetadataClassType
: instance.GetType();
var buddyClassProperties = TypeDescriptor.GetProperties(buddyClassOrModelClass)
.Cast<PropertyDescriptor>();
var modelClassProperties = TypeDescriptor.GetProperties(instance.GetType())
.Cast<PropertyDescriptor>();
var list = from buddyProp in buddyClassProperties
join modelProp in modelClassProperties on
buddyProp.Name equals modelProp.Name
from attribute in buddyProp.Attributes.OfType<ValidationAttribute>()
where !attribute.IsValid(modelProp.GetValue(instance))
select new ErrorInfo(
buddyProp.Name,
attribute.FormatErrorMessage(modelProp.Name),
instance);
if (name != null)
list = list.Where(x => x.PropertyName == name);
return list;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9082 次 |
| 最近记录: |