2010-06-21 63 views
4

我們正在將ASP.NET MVC 1.0應用程序升級到2.0版本,並且一些代碼需要使用需要HtmlHelper進行渲染的LinkExtensions。雖然我們知道某些代碼沒有正確地遵循MVC模型,並且正在根據需要進行重新編碼,但我們需要一些工作,因此需要構建應用程序。如何在ASP.NET MVC 2.0的視圖之外創建HtmlHelper?

這是當前的語法,我們有在ASP.NET MVC 1.0的工作原理:

public static HtmlHelper GetHtmlHelper(ControllerContext context) 
{ 
    return new HtmlHelper(new ViewContext(context, 
              new WebFormView("HtmlHelperView"), 
              new ViewDataDictionary(), 
              new TempDataDictionary()), 
          new ViewPage()); 
} 

,我們得到的錯誤如下:

錯誤1「的System.Web .Mvc.ViewContext」不包含一個構造函數4個參數

回答

5

有一個additional argument which takes a TextWriter

var viewContext = new ViewContext(
    context, 
    new WebFormView("HtmlHelperView"), 
    new ViewDataDictionary(), 
    new TempDataDictionary(), 
    context.HttpContext.Response.Output 
); 

這裏的問題是爲什麼你需要自己實例化一個htmlHelper而不是使用視圖中提供的那個?

+0

是的,我注意到TextWriter參數,但不知道它來自哪裏,謝謝!關於爲什麼我們不這樣做,我們的應用程序中的幾個頁面有相當複雜的鏈接,這些鏈接是通過LinkExtensions.ActionLink根據DataTable中的信息生成的。但是,由於這不是最好的做法,我們正在尋找更好的方式來處理鏈接(很可能是自定義控件)。現在,我們只需要構建和運行所需的東西,這樣我們就可以在嘗試新版本時重新開始測試。 – rjzii 2010-06-21 12:41:20

2

問題是(如錯誤消息所示),不再有ViewContext的構造函數需要4個參數。他們增加了第五個是一個textwriter。你可以這樣創建一個viewcontext:

new ViewContext(context, 
             new WebFormView("HtmlHelperView"), 
             new ViewDataDictionary(), 
             new TempDataDictionary()), 
         new ViewPage(), context.HttpContext.Response.Output);