2015-01-02 15 views
2

是否可以調用另一個控制器的動作並以字符串形式接收其作爲結果的視圖?調用另一個控制器的動作並將視圖作爲字符串獲取

我想使用.net mvc的標準行爲,它允許我基於適當的模型和視圖創建電子郵件消息。我知道我可以使用RazorEngine,但在這種情況下,我必須傳遞一個完整的路徑來查看,如果我想使用例如,我應該覆蓋基類。 @Html或@Url。

+0

你想從'Controller'或業務層類調用它?使用['VirtualPathUtility'](http://msdn.microsoft.com/en-us/library/system.web.virtualpathutility(v = vs.110).aspx) – Rhumborl

+0

可以非常容易地獲得視圖的完整路徑在哪種情況下?如果你有一個HtmlHelper,直接的方法就是調用@ Html.Action。 http://msdn.microsoft.com/en-us/library/system.web.mvc.html.childactionextensions.action.aspx – driis

+4

你見過[這篇文章](http://www.codemag.com/Article/ 1312081)? –

回答

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(); 
    } 
} 
相關問題