2008-09-22 81 views
8

我在Brad Wilson(http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html)上閱讀了一篇關於MVC Preview 5的新ViewEngine更改的文章,並認爲能夠將視圖渲染爲字符串用於測試。我從文章中得到的印象是可能實現這一目標,但無法弄清楚。MVC預覽版5 - 將視圖呈現爲字符串以進行測試

我相信這可以讓我們取消一些我們的WatIn測試(這很慢並且不可靠),因爲它可以讓我們通過簡單地檢查期望值/文本的字符串來檢查View是否正確顯示。

有沒有人執行過這樣的事情?

回答

5

這很棘手。你必須做的是將Response.Filter屬性設置爲你實現的自定義流類。 MVC Contrib項目實際上有這樣做的例子。我會在那裏徘徊。

0

此外測試,它可以用於HTML到PDF轉換器等組件。 這些組件通常使用2種轉換方式。

  • 傳遞一個URL到轉換方法
  • 傳遞一個HTML內容(你可以選擇指定的baseUrl解決虛擬路徑)

我使用的控制器內的授權濾波器,因此如果我重定向到URL,那麼呈現的HTML就是登錄頁面(我使用自定義驗證)。

如果我使用Server.Execute(Url)保留上下文,則該方法失敗(HttpUnhandledException:執行/ Template/Pdf/1的子請求時出錯。

所以我試圖檢索呈現的ViewResult的HTML,但我沒有成功。

1

我想這裏是你需要的。 RenderPartialToString函數將以字符串形式返回控制器。我從here得到它。

public static string RenderPartialToString(string controlName, object viewData) 
{ 
    ViewDataDictionary vd = new ViewDataDictionary(viewData); 
    ViewPage vp = new ViewPage { ViewData = vd }; 
    Control control = vp.LoadControl(controlName); 

    vp.Controls.Add(control); 

    StringBuilder sb = new StringBuilder(); 
    using (StringWriter sw = new StringWriter(sb)) 
    { 
     using (HtmlTextWriter tw = new HtmlTextWriter(sw)) 
     { 
      vp.RenderControl(tw); 
     } 
    } 

    return sb.ToString(); 
} 
相關問題