2015-07-01 19 views
0

我們正在嘗試創建一個返回JsonResult的動作,並且在某些時候該動作還應該返回其中的一些HTML以及其他數據。是否有可能從另一個返回PartialViewResult的動作生成HTML?將PartialViewResult添加到JsonResult

+2

可能重複[渲染視圖爲字符串](http://stackoverflow.com/questions/483091/render-a-view-as-a-string) – ramiramilu

+0

不是真的重複,因爲該問題是視圖特定的。這是關於渲染一個動作的結果 – harryovers

回答

0

我認爲這是你想達到的。

從另一個動作生成HTML聽起來很奇怪。

您可能從您的存儲庫中獲得相同的模型,然後渲染相同的PartialView。你將需要一個像下面這樣的方法。

//在RenderingHelper類

public static string RenderViewToString(ControllerContext context, string viewName, object model) 
     { 
      if (string.IsNullOrEmpty(viewName)) 
       viewName = context.RouteData.GetRequiredString("action"); 

      ViewDataDictionary viewData = new ViewDataDictionary(model); 

      using (StringWriter sw = new StringWriter()) 
      { 
       ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(context, viewName); 
       ViewContext viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw); 
       viewResult.View.Render(viewContext, sw); 

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

,然後你會呈現相應的局部視圖:

string renderedHtml = RenderingHelper.RenderViewToString(this.ControllerContext, "~/Views/MyController/MyPartial", viewModel); 

viewModel是「其他行動」中使用的模型也和"~/Views/MyController/MyPartial"是「其他行動」也使用了局部視圖。