好吧,這對我來說是一個非常棘手的挑戰。我們正在將現有的ASP.NET網站轉換(僅重新設計PL)爲MVC。我們的網站非常複雜。但最難的部分是將現有的自定義控件轉換爲MVC equivilant。自定義控件(我不是在談論用戶控件)當然是一個繼承System.Web.UI.Control的類,並且始終使用該對象。例如,我們在這個現有的自定義類的,像這樣的頂部的一些屬性:將經典的ASP.NET自定義控件轉換爲MVC
Dictionary<int, Control> configControls;
DropDownList kControl;
CheckBox confirmBox;
這些都是在傳統的ASP.NET類型的Web控件的變量。
所以我想我可以做什麼(無需從頭開始構建全新的自定義控件)就是使用HtmlHelper對象。所以,我想這一點:
(包括第一using語句,包括System.Web.MVC.Html我的新的自定義類的在我們的新的Web項目上)
私人的HtmlHelper幫手; 詞典configControls; helper.DropDownList
但這不起作用。我想我不能像這樣使用這個對象?我想我可以在字典中使用HtmlHelper,然後從助手中創建變量類型。但這些只是擴展方法,而不是對象
我不知道類似於我們可用於繼承的通用「控件」(如經典ASP.NET)的等價物。毫無疑問,它在MVC中不會是相同的(無狀態和完全不同的做事方式),但是我可以在MVC中使用相同的概念類型嗎?
所以我想我可以做什麼(無需從頭開始構建全新的自定義控件)就是使用HtmlHelper對象。所以,我想這一點:
(包括第一using語句,包括System.Web.MVC.Html我的新的自定義類的在我們的新的Web項目上)
private HtmlHelper helper;
Dictionary configControls;
helper.DropDownList
,但是這是不工作。我甚至不知道這種方法是否可以在我的自定義控件中工作。當我嘗試使用我的助手變量時,我不會獲得任何擴展方法,除非它在已簽名傳入HtmlHelper參數的現有擴展方法中。所以,當我在外部自定義類中創建該私有變量時,智能感知可以在做「幫手」時進行選擇。所以我需要像這樣定義這個對象:?
private HtmlHelper htmlHelper = new HtmlHelper();
但它要求一個ViewContext和一個IViewDataContainer作爲參數。如果我構建了一個自定義的方法,它還不知道它的視圖(它不應該需要),因爲我只是在這個自定義類中創建HMTL字符串以傳遞給Extension方法以最終吐出字段,然後也許我不能像這樣在自定義類中使用HtmlHelper。
那麼我可以使用該對象而不是「控制」?也許我甚至可以在我的字典變量中使用類型對象來代替控制權?當我需要使用或引用字典中的值時,我不知道然後投射對象來鍵入HtmlHelper?但現在,我想我可以在Dictionary中使用HtmlHelper對象,然後從助手中創建變量類型。但這些只是擴展方法,而不是對象。
我希望在閱讀本文時,我可以對此有所瞭解。
我看到「經典ASP.net」的大熱門:) – Hugoware 2009-06-18 14:15:49
感謝您指出這一點。我無法理解這個問題有什麼奇怪的地方。 :) – 2009-06-18 14:19:31