我正在创建自定义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 对从标记帮助程序呈现部分模板的功能.
更多推荐
如何在ASP.NET Core中的自定义TagHelper中呈现Razor模板?
发布评论