gpt4 book ai didi

asp.net-mvc - 从 ModelMetaData 获取另一个属性的值

转载 作者:行者123 更新时间:2023-12-04 14:17:48 26 4
gpt4 key购买 nike

我试图从 GetClientValidationRules 中获取另一个属性的值自定义验证属性的方法。

这是我的尝试(基于 Darin's response on another question):

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(
ModelMetadata metadata, ControllerContext context)
{
var parentType = metadata.ContainerType;
var parentMetaData = ModelMetadataProviders.Current
.GetMetadataForType(null, parentType);

var parentMetaData = ModelMetadataProviders.Current
.GetMetadataForProperties(context.Controller.ViewData.Model, parentType);

var otherProperty = parentMetaData.FirstOrDefault(p =>
p.PropertyName == "SomeProperty");

var otherValue = otherProperty.Model;

var rule = new ModelClientValidationRule
{
ValidationType = "customvalidatorattribute",
ErrorMessage = this.FormatErrorMessage(metadata.GetDisplayName()),
};

yield return rule;
}

但是,当尝试设置 otherValue ,我得到:

System.Reflection.TargetException: Object does not match target type.

最佳答案

问题是您没有传入绑定(bind)模型。更改以下两行:

var parentMetaData = ModelMetadataProviders.Current
.GetMetadataForProperties(context.Controller.ViewData.Model, parentType);
var otherValue = (string)parentMetaData.FirstOrDefault(p =>
p.PropertyName == "SomeProperty").Model;

这将从当前模型中获取完整的元数据(包括绑定(bind)值)。

关于asp.net-mvc - 从 ModelMetaData 获取另一个属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8014729/

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