我正在发现.Net核心标记助手,我很想知道是否有任何标记助手可以复制@Html.DisplayFor
。我认为label tag helper
复制@Html.DisplayNameFor
,因为它在传递给页面的模型上显示了属性名称,但是有@Html.DisplayFor
的等价物用于显示属性值吗?
我假设没有,因为在microsoft .net核心教程中,需要显示属性值而不是属性名称的razor页面使用HTML帮助程序。
答案 0 :(得分:0)
首先,标签帮助程序实际上是“ asp-for标签”。您可以创建一个新的标签帮助程序,它是“标签asp文本”帮助程序。
另一种选择是使用诸如span之类的其他标签,并创建一个自定义的“ span asp-for”标签帮助器。
这是一个简单的span实现:
[HtmlTargetElement("span", Attributes = FOR_ATTRIBUTE_NAME, TagStructure = TagStructure.NormalOrSelfClosing)]
public class CustomSpanTagHelper : InputTagHelper
{
private const string FOR_ATTRIBUTE_NAME = "asp-for";
public CustomSpanTagHelper(IHtmlGenerator generator) : base(generator)
{
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (output == null)
{
throw new ArgumentNullException(nameof(output));
}
var metadata = base.For.Metadata;
if (metadata == null)
{
throw new InvalidOperationException(string.Format("No provided metadata " + FOR_ATTRIBUTE_NAME));
}
if (!string.IsNullOrWhiteSpace(metadata.Description))
{
output.Content.Append(metadata.Description);
}
if (metadata.IsEnum)
{
var description = (this.For.Model as Enum).GetDescription();
output.Content.Append(description);
}
base.Process(context, output);
}
}
您将需要在_ViewImports.cshtml中注册自定义标签帮助程序,如下所示:(别忘了重建)
@namespace MyProject.Web.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper MyProject.Web.TagHelpers.CustomSpanTagHelper, MyProject.Web <-- custom import