【问题标题】:.NET Tag Helper to replicate @Html.DisplayFor.NET Tag Helper 复制 @Html.DisplayFor
【发布时间】:2018-03-17 22:45:52
【问题描述】:

我正在发现 .Net Core Tag Helpers,我只是想知道是否有任何标签助手可以复制 @Html.DisplayFor。我认为label tag helper 复制了@Html.DisplayNameFor,因为它显示了传递给页面的模型上的属性名称,但是@Html.DisplayFor 是否有等价物来显示属性值?

我假设没有,因为在 microsoft .net 核心教程中,需要显示属性值而不是属性名称的 razor 页面使用 HTML 帮助程序。

【问题讨论】:

标签: html-helper asp.net-core-tag-helpers


【解决方案1】:

首先,标签助手实际上是“标签 asp-for”。您可以创建一个新的标签助手,它是一个“标签 asp-text”助手。

另一种选择是使用另一个标签,例如 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2022-01-12
    • 2020-03-08
    • 1970-01-01
    相关资源
    最近更新 更多