Gra*_*les 3 c# asp.net-core-mvc asp.net-core-viewcomponent
我目前有几个在许多不同地方使用的视图组件。我希望能够将调用视图组件时生成的 HTML 存储到字符串变量中,以便我可以将 HTML 用于其他目的(例如电子邮件)。
我查看了问题和帖子,但无法找到符合我需求的问题和帖子。我目前已存储 ViewComponentResult 供使用,但 ExecuteResult() 返回 void,因此无法使用它。
我希望能够操纵要执行的视图组件结果,然后返回将发送到浏览器进行显示的 HTML。然后我可以使用它作为电子邮件正文。然而,如果不知道结果视图的完整路径,我目前还无法接近获取 HTML
我找到了一种完全符合我需要的方法(以字符串形式获取返回的 HTML),如本文的一个答案中所述。
我使用的代码块是..
public async Task<string> RenderViewComponent(string viewComponent, object args) {
var sp = HttpContext.RequestServices;
var helper = new DefaultViewComponentHelper(
sp.GetRequiredService<IViewComponentDescriptorCollectionProvider>(),
HtmlEncoder.Default,
sp.GetRequiredService<IViewComponentSelector>(),
sp.GetRequiredService<IViewComponentInvokerFactory>(),
sp.GetRequiredService<IViewBufferScope>());
using (var writer = new StringWriter()) {
var context = new ViewContext(ControllerContext, NullView.Instance, ViewData, TempData, writer, new HtmlHelperOptions());
helper.Contextualize(context);
var result = await helper.InvokeAsync(viewComponent, args);
result.WriteTo(writer, HtmlEncoder.Default);
await writer.FlushAsync();
return writer.
}
}
Run Code Online (Sandbox Code Playgroud)
