gpt4 book ai didi

asp.net-mvc - ASP.NET MVC ValidationAttribute 获取其他属性显示名称

转载 作者:行者123 更新时间:2023-12-02 04:15:38 24 4
gpt4 key购买 nike

我通过复制 ASP.NET MVC 3 CompareAttribute 创建了一个自定义 CompareLessThan 验证属性,我没有检查是否相等,而是检查一个属性是否小于另一个属性。如果存在客户端错误,则会向用户显示消息“{0} 必须小于 {1}”。

我的模型设置如下,显示属性引用资源文件。

[CompareLessThan("AmountAvailable", ErrorMessageResourceName="CompareLessThan", ErrorMessageResourceType = typeof(Resources.ValidationMessages))]
[Display(Name = "Amount", ResourceType = typeof(Resources.Labels))]
public decimal Amount { get; set; }

[Display(Name = "AmountAvailable", ResourceType = typeof(Resources.Labels))]
public decimal AmountAvailable { get; set; }

那么自定义验证GetClientValidationRules方法就和CompareAttribute中的一模一样了

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationLessThanRule(FormatErrorMessage(metadata.DisplayName), FormatPropertyForClientValidation(OtherProperty), this.AllowEquality);
}

这里我们生成错误消息,如果出现问题,该消息将显示给用户。我可以从使用自定义 CompareLessThan 属性装饰的属性的资源文件中获取显示名称,但我的问题是如何获取我们正在比较的“其他”属性的显示名称?在 IsValid 方法中,我们引用了 validatingContext,我可以从中生成“其他”属性的 PropertyInfo 对象,并且我认为可以获取显示名称。但是,在 GetClientValidationRules 中我无权访问它。

我总是可以传入另一个值作为另一个属性的显示名称,但我希望有一种方法可以派生它,因为我已经使用数据注释指定了它。

有什么想法吗?

最佳答案

从 ASP.NET MVC 4 开始,这就是我设法获取其他属性的方法:

PropertyInfo otherPropertyInfo =
this.Metadata.ContainerType.GetProperty(attribute.DependentProperty);

然后我从属性中获取了 Display 属性:

var displayAttribute =
otherPropertyInfo.GetCustomAttributes(typeof(DisplayAttribute), true).
FirstOrDefault() as DisplayProperty;

就您而言:

// GetName() is important to get the translated name if you're using a resource file...
this.otherPropertyDisplayName = displayAttribute.GetName();

GetName() 引用:

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayattribute.name%28v=vs.95%29.aspx

关于asp.net-mvc - ASP.NET MVC ValidationAttribute 获取其他属性显示名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7761665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com