c# - 使用多个参数(模型和 ViewDataDictionary)创建 RenderPartialViewToString
问题描述
我正在尝试创建一个新函数,将部分视图呈现为包含视图、模型和 ViewDataDictionary的字符串。我目前正在使用该函数来渲染仅包含模型的部分
public string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
我想创建一个新函数,它也可以将部分呈现为字符串,但也会在(在本例中为 ViewDataDictionary)中采用另一个参数。当我渲染我想要的部分时,我在 cshtml 代码中执行以下操作
@Html.Partial("~/Views/Product/ProductQtyPartialView.cshtml", Model, new ViewDataDictionary {{"temp", "1,2"}})
在控制器和服务方法中,我想将部分呈现为字符串,以便我可以使用更新的部分更新视图。
任何帮助将不胜感激
解决方案
玩了一会儿之后,我能够弄清楚
public string RenderPartialViewToStringWithNewData(string viewName, object model, string temp)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
ViewData["temp"] = temp;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
它与上面的 RenderPartialViewToString 函数相同,但添加了一行
ViewData["temp"] = temp
使用这个新功能,您不必更改视图,并且可以像这样调用此功能
RenderPartialViewToStringWithNewData("~/Views/Product/ComponentsPartialView.cshtml", currProduct, temp)
推荐阅读
- git - 克隆 repo,只有几个可用的分支
- jestjs - 无法使用 jest-puppeteer 运行 Jest Snapshot 测试
- unity3d - Unity 3D游戏对象不移动
- android-jetpack-compose - Jetpack Compose - 可变范围/最佳实践
- python - 模拟 DJango ORM pytest 的 SQLite 数据库调用
- prometheus - Prometheus 查询:在 Grafana 中加入 2 个指标
- php - 多选字段在 Silverstripe 4 管理员搜索中不起作用
- express - 在 Express 中使用 res.sendFile() “无法获取 /”
- swift - 如何创建 Instagram 和 twitter 等功能来提及用户和主题标签?
- flutter - 如何将 DataTable 标签准确地放在中心?扑