调用另一个控制器的操作并将视图作为字符串

时间:2015-01-02 18:34:28

标签: c# asp.net-mvc razor

是否可以调用另一个控制器的操作并将其结果视图作为字符串接收?

我想使用.net mvc的标准行为,它允许我根据正确的模型和视图创建电子邮件。我知道我可以使用RazorEngine,但在这个例子中我必须传递一个完整的路径来查看,如果我想使用eg,我应该覆盖基类。 @Html或@Url。

1 个答案:

答案 0 :(得分:0)

我已经在几种情况下通过将以下内容添加到我的基本控制器类来完成此操作。

protected string RenderViewToString(string viewName, object model = null)
{
  ViewData.Model = model;
  using(StringWriter sw = new StringWriter())
  {
    ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
    ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
    viewResult.View.Render(viewContext, sw);

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

protected string RenderPartialViewToString(string viewName, object model = null)
{
  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();
  }
}