gpt4 book ai didi

c# - TagHelper ModelExpression 元数据中不存在描述属性文本

转载 作者:行者123 更新时间:2023-12-05 04:00:21 29 4
gpt4 key购买 nike

尝试编写自定义 TagHelper 来显示模型属性的 Description 属性。一切似乎都正常,但描述文本没有传递到我的 ModelExpression 元数据,它仍然是 null

这是一个 asp.net core 2.1 应用程序。我在我的 TagHelper 的 Process 中遇到断点,所以它正在运行。 DisplayName 属性在 For.Metadata 中是正确的,因此 ModelExpression For 正确解析。

模型是在另一个程序集中定义的,而不是使用它的代码,这会是个问题吗?

型号:

public class MyModel {
[Description("a description")]
[DisplayName("display name")]
public string MyProperty {get; set;}
}

标签助手:

[HtmlTargetElement("span", Attributes = AttributeName)]
public class DescriptionTagHelper : TagHelper
{
private const string AttributeName = "asp-description-for";

/// <summary>
/// An expression to be evaluated against the current model.
/// </summary>
[HtmlAttributeName(AttributeName)]
public ModelExpression For { get; set; }

public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}

if (output == null)
{
throw new ArgumentNullException(nameof(output));
}

if (!output.IsContentModified)
{
output.Attributes.SetAttribute("class", "text-muted");
output.Content.SetContent(For.Metadata.Description);
}
}
}

用法:

<span asp-description-for="MyModel.MyProperty"></span>

使用智能感知,我可以看到 For.Metadata.Attributes 集合包含一个带有正确文本的 DescriptionAttribute。我认为 Description 元数据应该是这个是错误的吗?

最佳答案

已解决,从a github issue中发现System.ComponentModel.DescriptionAttribute 在 asp.net core 中不受支持,并且 System.ComponentModel.DataAnnotations.DisplayAttribute 具有填充的 Description 属性ModelExpression

中的相关元数据文本

这有点难以找到文档,希望谷歌搜索的人能在这里找到帮助。

tl;dr - 将 [Description("blah")] 更改为 [Display(Description="blah")]

关于c# - TagHelper ModelExpression 元数据中不存在描述属性文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56271719/

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