2011-11-16 83 views
0

在我的MVC3應用程序中,我通過創建一個新控制器並調用諸如Index()之類的方法來測試內容,並將結果ViewResult存儲到名爲result的變量中。在MVC3中獲取由視圖呈現的HTML

我該如何戳這個對象(或別的東西)才能將實際的HTML返回給瀏覽器?

我很驚訝result.ViewName爲空,result.Model爲空,result.View爲空,甚至result.TempData爲空。 (result.ViewBag有東西我放在viewbag,所以我知道整個堆棧工作正常。)

如果它很重要,我使用Visual Studio測試,以及NHibernate/ActiveRecord爲我的堆棧。但所有這些都在我的測試項目中正確初始化。 (我可以從實體/對象中獲取數據。)

+1

我覺得你想得太多了。 :)你不需要測試HTML的內容,更多的是通過控制器傳遞給View的'Model'的內容。 HTML的測試應該是可視的(例如查看網頁) – RPM1984

+0

@ RPM1984有些東西不適合我的模型我想測試;比如正在使用哪個CSS文件夾(超出許多可能性)。 – ashes999

+0

Dupe的http://stackoverflow.com/questions/483091/render-a-view-as-a-string,儘管這些解決方案都沒有爲我工作 – ashes999

回答

0

要注意的事項:
1.如果您只寫了ViewName();並且不要寫明確的視圖名稱。
2. TempData是控制器的屬性,以便ViewBag。見MSDN

更新:順便問一下有在MVC MvcContrib

0

測試一個完美的事情,庫這是我用它來創建HTML電子郵件的東西,但也有可能在你的情況下使用爲好,輸出查看結果的HTML到一個字符串中。

public static string RenderViewToString(Controller controller, string viewName, object model) 
{ 
    controller.ViewData.Model = model; 
    try 
    { 
     using (StringWriter sw = new StringWriter()) 
     { 
      ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, null); 
      ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); 
      viewResult.View.Render(viewContext, sw); 
      viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View); 

      return sw.ToString(); 
     } 
    } 
    catch (Exception ex) 
    { 
     return ex.ToString(); 
    } 
} 
+0

我得到一個null的ViewContext爲此。 – ashes999

相關問題