我正在创建一个自定义 HTML 标记帮助程序:
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 吗?
是否可以获得剃须刀引擎的参考?
可以请求在自定义 TagHelper 中注入 IHtmlHelper:
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);
}
}
The IHtmlHelper
提供的实例尚未准备好使用,有必要将其置于上下文中,因此(html as IViewContextAware).Contextualize(ViewContext);
陈述。
The IHtmlHelper.Partial
然后可以使用方法来生成模板。
信用去往弗兰克·阿布鲁泽塞对于他的评论从标签助手渲染部分模板的工具.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)