gpt4 book ai didi

asp.net-core-mvc - MVC 6 标签助手作为编辑器模板的替代品

转载 作者:行者123 更新时间:2023-12-02 20:19:01 26 4
gpt4 key购买 nike

MVC 6 引入了标记帮助程序,作为 @Html.EditorFor 的更好替代方案。可以创建自定义编辑器模板。还可以创建自定义标签帮助程序。

但是,在创建Tag Helper时,需要通过C#代码(使用TagBuilder等)创建HTML。对于复杂的标记帮助程序,它不如使用 Razor 语法方便。

我是否缺少任何方法可以让我从 Razor 页面创建自定义标记帮助程序?

最佳答案

TagHelper 的优点在于您可以通过多种不同方式混合 C# 和 Razor。假设您有一个自定义 Razor 模板,例如:

CustomTagHelperTemplate.cshtml

@model User

<p>User name: @Model.Name</p>
<p>User id: @Model.Id</p>

你有模型:

namespace WebApplication1
{
public class User
{
public string Name { get; set; }
public int Id { get; set; }
}
}

还有TagHelper:

using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Microsoft.Framework.WebEncoders;

namespace WebApplication1
{
public class UserTagHelper : TagHelper
{
private readonly HtmlHelper _htmlHelper;
private readonly IHtmlEncoder _htmlEncoder;

public UserTagHelper(IHtmlHelper htmlHelper, IHtmlEncoder htmlEncoder)
{
_htmlHelper = htmlHelper as HtmlHelper;
_htmlEncoder = htmlEncoder;
}

[ViewContext]
public ViewContext ViewContext
{
set
{
_htmlHelper.Contextualize(value);
}
}

public string Name { get; set; }

public int Id { get; set; }

public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagName = null;
output.SelfClosing = false;

var partial = await _htmlHelper.PartialAsync(
"CustomTagHelperTemplate",
new User
{
Name = Name,
Id = Id
});

var writer = new StringWriter();
partial.WriteTo(writer, _htmlEncoder);

output.Content.SetContent(writer.ToString());
}
}
}

然后您可以编写以下页面:

@addTagHelper "*, WebApplication1"

<user id="1234" name="John Doe" />

生成:

<p>User name: John Doe</p>
<p>User id: 1234</p>

关于asp.net-core-mvc - MVC 6 标签助手作为编辑器模板的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31895914/

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