c# - 是否可以在控制器内执行 ViewComponent 并将 HTML 存储为字符串
问题描述
我目前有几个视图组件在许多不同的地方使用。我希望能够将调用视图组件时生成的结果 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.
}
}
推荐阅读
- elasticsearch - 您可以在 Kibana 中以编程方式创建视觉效果吗?
- django - 保存更新的用户密码 django
- python - 如何从用户模型访问在 Django 中使用 google 登录的用户的用户名
- css - 为什么这种将 textarea 与其标签对齐的方法有效?
- go - Go 中是否有类似 Python 中的 bumps.packbits 的函数(从 int 数组中生成二进制数)?
- python - Kivy/PyMongo:使用 TextInput 中的“输入”键将输入的注释输入数据库
- javascript - 为什么 data 是异步 readFile 函数中的参数?
- go - Go 中的 process.env.VAR 替代方案
- mapping - Solidity Mapping,可以存储被批准的地址,然后那些被批准的地址是唯一可以改变代币费率的人
- python - 预期“:”皮兰斯