如何在ASP.NET Core中的自定义TagHelper中呈现Razor模板? [英] How to render a Razor template inside a custom TagHelper in ASP.NET Core?
问题描述
我正在创建自定义HTML标记帮助器:
I am creating a custom HTML Tag Helper:
public class CustomTagHelper : TagHelper
{
[HtmlAttributeName("asp-for")]
public ModelExpression DataModel { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
string content = RazorRenderingService.Render("TemplateName", DataModel.Model);
output.Content.SetContent(content);
}
}
如何以编程方式呈现部分视图,以及如何在TagHelper.ProcessAsync中以字符串形式获取呈现的内容?
我应该请求注入IHtmlHelper吗?
有可能获得剃须刀引擎的参考吗?
How to render a partial view programatically an get the rendered content as a string inside TagHelper.ProcessAsync ?
Should I request the injection of an IHtmlHelper ?
Is it possible to get a reference to the razor engine ?
推荐答案
可以在自定义TagHelper中请求注入IHtmlHelper:
It is possible to request the injection of an IHtmlHelper in the custom TagHelper:
public class CustomTagHelper : TagHelper
{
private readonly IHtmlHelper html;
[HtmlAttributeName("asp-for")]
public ModelExpression DataModel { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public CustomTagHelper(IHtmlHelper htmlHelper)
{
html = htmlHelper;
}
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
//Contextualize the html helper
(html as IViewContextAware).Contextualize(ViewContext);
var content = await html.PartialAsync("~/Views/path/to/TemplateName.cshtml", DataModel.Model);
output.Content.SetHtmlContent(content);
}
}
提供的IHtmlHelper
实例尚未准备就绪,无法使用,因此有必要将其上下文化,因此需要(html as IViewContextAware).Contextualize(ViewContext);
语句.
The IHtmlHelper
instance provided is not ready for use and it is necessary to contextualize it, hence the (html as IViewContextAware).Contextualize(ViewContext);
statement.
然后可以使用IHtmlHelper.Partial
方法来生成模板.
The IHtmlHelper.Partial
method can then be used to generate the template.
信贷请 frankabbruzzese 对 查看全文