【发布时间】:2013-08-26 10:50:08
【问题描述】:
我正在尝试使用来自this question 的已接受答案。
看来这正是我正在寻找的,但我有一个问题。我不知道该怎么称呼它。这是我到目前为止所拥有的:
首先我从我提到的解决方案中复制代码:
public string ToHtml(string viewToRender, ViewDataDictionary viewData, ControllerContext controllerContext)
{
var result = ViewEngines.Engines.FindView(controllerContext, viewToRender, null);
StringWriter output;
using (output = new StringWriter())
{
var viewContext = new ViewContext(controllerContext, result.View, viewData, controllerContext.Controller.TempData, output);
result.View.Render(viewContext, output);
result.ViewEngine.ReleaseView(controllerContext, result.View);
}
return output.ToString();
}
这就是我所拥有的:
string viewToRender = "...";
int Data1 = ...;
int Data2 = ...;
System.Web.Mvc.ViewDataDictionary viewData = new System.Web.Mvc.ViewDataDictionary();
viewData.Add("Data1",Data1);
viewData.Add("Data2",Data2);
string html = ToHtml(viewToRender, viewData, ?????)//Here is my problem.
我应该在controllerContext参数中传递什么?
【问题讨论】:
-
控制器上下文是 MVC 控制器的一个属性。如果您想查看当前控制器的视图,请键入:this.ControllerContext
-
@Oliver 我想在控制器之外调用这个方法。这甚至可能吗?如果是,那么我想以某种方式定义控制器。我该怎么做?
-
我使用这个助手:public static string RenderPartialViewToString(Controller controller, string viewName, object model) 而不是我只调用controller.ControllerContext。
-
您是否尝试过为您的 Controller 创建一个新实例,然后将 controllerContext 传递给您的助手?
-
@Oliver 感谢您的信息。如果我创建一个新对象,它可以工作......我是否可以像在 ViewToRender 中那样将它作为字符串传递?我必须使用反射吗?
标签: c#-4.0 asp.net-mvc-4