我创建了一个自定义验证属性,如下所示:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class MandatoryAttribute : RequiredAttribute
{
public string DisplayName { get; private set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var memberName = validationContext.MemberName;
DisplayName = AttributeFunctions.GetDisplayName(validationContext);
return base.IsValid(value, validationContext);
}
public override string FormatErrorMessage(string name)
{
return AttributeFunctions.HasValidErrorMessageResource(this) ? base.FormatErrorMessage(DisplayName) : String.Format(Global.MandatoryValidationMessage, DisplayName);
}
}
我的模型看起来像这样:
public class Model
{
[Mandatory]
[Display(Name = "ResourceName", ResourceType = typeof(Resources.Global))]
public string SomeProperty { get; set; }
}
出于某种原因,MemberName
的{{1}}将始终等于我在ValidationContext
属性中放置的内容。如果我对Display
属性发表评论,那么Display
就像我期望的那样等于MemberName
。
这是正常行为吗? "SomeProperty"
不应该始终等于MemberName
属性吗?
我说这是因为我需要从验证上下文中检索PropertyInfo.Name
,如果PropertyInfo
没有给我正确的值,我就无法做到。
答案 0 :(得分:0)
我有同样的问题 这是一个来自webapi的bug,在mvc中运行正常
带有bug的webapi源代码中的类 https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Validation/Validators/DataAnnotationsModelValidator.cs
mvc 5中的工人阶级 https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/DataAnnotationsModelValidator.cs
我会尝试覆盖这个,如果工作我会更新这篇文章