TagHelper ModelExpression 元数据中不存在描述属性文本
Description attribute text not present in TagHelper ModelExpression Metadata
正在尝试编写自定义 TagHelper 来显示模型 属性 的 Description
属性。一切似乎都正常,但描述文本没有传递到我的 ModelExpression 元数据,它仍然是 null
.
这是一个 asp.net 核心 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中发现asp.net核心不支持System.ComponentModel.DescriptionAttribute
,而System.ComponentModel.DataAnnotations.DisplayAttribute
有一个Description
属性填充相关ModelExpression
中的元数据文本
很难找到相关文档,希望谷歌搜索的人能在这里找到帮助。
tl;dr - 将 [Description("blah")]
更改为 [Display(Description="blah")]
正在尝试编写自定义 TagHelper 来显示模型 属性 的 Description
属性。一切似乎都正常,但描述文本没有传递到我的 ModelExpression 元数据,它仍然是 null
.
这是一个 asp.net 核心 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中发现asp.net核心不支持System.ComponentModel.DescriptionAttribute
,而System.ComponentModel.DataAnnotations.DisplayAttribute
有一个Description
属性填充相关ModelExpression
很难找到相关文档,希望谷歌搜索的人能在这里找到帮助。
tl;dr - 将 [Description("blah")]
更改为 [Display(Description="blah")]