首页 > 解决方案 > 使用多个参数(模型和 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"}})

在控制器和服务方法中,我想将部分呈现为字符串,以便我可以使用更新的部分更新视图。

任何帮助将不胜感激

标签: c#asp.netasp.net-mvc

解决方案


玩了一会儿之后,我能够弄清楚

   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)

推荐阅读