RenderPartialViewToString设置控制器

时间:2014-08-06 02:00:27

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

我需要获取视图的结果并输入变量。 研究SO,我找到了几个例子并根据下面的代码实现。

但是,我想花费控制器或视图"〜/ Home / Acount",但今天的代码仅仅属于视图控制器。

我应该如何更改以设置和定义控制器。

代码:

protected 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();
    }
}

1 个答案:

答案 0 :(得分:0)

是的,我正在进行死灵法术,但是我通过Google遇到了这个悬而未决的帖子,所以如果它可以帮助其他人: 上面的示例的问题在于,您没有从调用控制器方法(可以通过this.ControllerContext获得)的ControllerContext传递给此方法。

将您的示例留在上面:

protected string RenderPartialViewToString(ControllerContext context, string viewName, object model)
{
    var controller = context.Controller;

    if (string.IsNullOrEmpty(viewName))
        viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

    ViewData.Model = model;

    using (StringWriter sw = new StringWriter())
    {
        ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
        ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}