gpt4 book ai didi

html-helper - .NET Tag Helper 复制@Html.DisplayFor

转载 作者:行者123 更新时间:2023-12-05 07:35:57 29 4
gpt4 key购买 nike

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

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

最佳答案

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

另一个选择是使用另一个标签,例如 span 并创建一个自定义的“span asp-for”标签助手。

这是一个简单的跨度实现:

[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

关于html-helper - .NET Tag Helper 复制@Html.DisplayFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342667/

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