我正在尝试创建一个新函数,该函数将部分视图呈现为包含视图的字符串,模型以及ViewDataDictionary 。我目前正在使用该功能来渲染仅包含模型的局部模型
@Html.Partial("~/Views/Product/ProductQtyPartialView.cshtml", Model, new ViewDataDictionary {{"temp", "1,2"}})
我想创建一个新函数,该函数也可以将字符串的一部分呈现出来,但是还将采用另一个参数(在本例中为ViewDataDictionary)。当我渲染所需的部分图像时,我在cshtml代码中执行以下操作
.wrapper {
display: grid;
grid-template-areas:
"nav nav nav nav nav nav nav nav nav nav nav nav"
"ft ft ft ft ft ft ft ft ft ft ft ft";
grid-template-columns: repeat(12, 1fr);
grid-template-rows: repeat(6, 1fr);
gap: 0.5em;
}
#nav {
grid-area: nav;
height: 200px;
/* new */
display: flex;
align-items: flex-end;
}
#list {
list-style: none;
background: darkcyan;
/* new */
flex: 1;
}
#footer {
grid-area: ft;
}
.wrapper > * {
background: #444;
color: #fff;
padding: 1em;
}
在控制器和服务方法中,我想将部分渲染为字符串,以便可以使用更新的部分更新视图。
任何帮助将不胜感激
答案 0 :(得分:0)
玩了一会儿之后,我就能弄清楚了
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)