gpt4 book ai didi

asp.net-mvc-3 - 是否可以从自定义显示或编辑器模板访问其他元数据信息?

转载 作者:行者123 更新时间:2023-12-04 03:30:20 24 4
gpt4 key购买 nike

我知道,在自定义显示或编辑器模板中,我可以通过ViewData.ModelMetadata获取有关模型的元数据,该文件具有指示是否已为该属性定义了某些元数据属性的属性,例如IsRequiredDisplayName等。但是无论如何,我是否可以访问通过自定义属性添加到属性中的自定义元数据?

例如,在我看来,我有一个像这样的属性(property):

[UIHint("Whizbang")]
[SomeAttribute("foobar")]
public string LeftWhizbang { get; set; }

我有一个名为 Whizbang.cshtml的自定义显示模板,其内容如下:
@model string

Left Whizbang Value: @Model

我想做的是能够确定 LeftWhizbang属性是否用 SomeAttribute属性修饰,如果是,我想访问该属性的 Message属性(例如),即值“foobar”。

我希望能够在模板中执行以下操作:
@model string

Left Whizbang Value: @Model

@{
SomeAttributeAttribute attr = ViewData.ModelMetadata.GetAttributes(...);
if (attr != null)
{
<text>... and the value is @attr.Message</text>
}
}

这有可能吗,还是我看不起死胡同?

最佳答案

当然。首先,您需要实现IMetadataAware的属性,以便DataAnnotationsModelMetadataProvider知道它

public class TooltipAttribute : Attribute, IMetadataAware {
public TooltipAttribute(string tooltip) {
this.Tooltip = tooltip;
}

public string Tooltip { get; set; }

public void OnMetadataCreated(ModelMetadata metadata) {
metadata.AdditionalValues["Tooltip"] = this.Tooltip;
}
}

然后,您可以通过创建一个辅助方法来访问该属性:
public static IHtmlString TooltipFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression) {
var data = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
if (data.AdditionalValues.ContainsKey("Tooltip"))
return new HtmlString((string)data.AdditionalValues["Tooltip"]);

return new HtmlString("");
}

关于asp.net-mvc-3 - 是否可以从自定义显示或编辑器模板访问其他元数据信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681534/

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