如何在ASP.NET Core中的自定义TagHelper中呈现Razor模板? [英] How to render a Razor template inside a custom TagHelper in ASP.NET Core?

查看:173
本文介绍了如何在ASP.NET Core中的自定义TagHelper中呈现Razor模板?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建自定义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 查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆