2012-01-27 23 views
32

我準備好負責領導一個小的ASP.net MVC應用程序的開發。這是我第一次創建一個MVC應用程序,所以我很興奮!爲什麼我不能在ASP.net MVC中使用服務器控件?

我仔細閱讀了文檔,我覺得我對MVC的工作原理有一個大致的瞭解。但是,如果我理解正確,服務器控件(如GridView,例如)不是MVC的一部分。

我的問題是:爲什麼?在我的開發車間,我很習慣使用像GridView和MS Chart Controls這樣的控件,在沒有它們的情況下我幾乎完全喪失了開發。看起來好像重新開始。

爲什麼服務器控件不可用?微軟希望我如何在沒有他們的情況下工作?有什麼選擇?

+12

MVC的重點在於不使用服務器控件。 – SLaks 2012-01-27 19:41:04

+2

我認爲MVC的重點是單獨開發成不同的關注點,以使測試更容易,加速開發等等。 – 2012-01-27 19:47:59

+7

好的;整個MVC中的一點就是不使用服務器控件。 – SLaks 2012-01-27 19:48:29

回答

57

我的問題是:爲什麼?

,因爲他們大多取決於如ViewState的東西和回傳模式這是經典的WebForms模型的一部分,ASP.NET MVC不復存在。這些服務器端控件依賴於事件,這些事件將執行回傳到服務器,並在隱藏字段(ViewState)中保持它們的狀態。在ASP.NET MVC中,您不再使用諸如Button1_Click之類的事件。在ASP.NET MVC中,您可以使用模型,控制器和視圖。控制器負責接收用戶請求,查詢模型,將結果轉換爲視圖模型,並將此視圖模型傳遞給負責以某種形式顯示它的視圖。

在ASP.NET MVC中有HTML助手可以用來在視圖之間生成一些可重用的HTML片段。你可以看看這樣的助手的Telerik ASP.NET MVC suite的例子。他們稱它們爲控件,但它們與經典的WebForms服務器端控件無關。他們只是HTML助手。

基本上經典的WebForms是Web的漏洞抽象。當他們設計這個框架的時候,微軟所做的一切就是把現有的Windows開發人員的技能帶到網絡上,這個技術越來越流行。但是由於網絡仍然是大多數開發者還不熟悉的新技術,他們創造了這種抽象來隱藏www的工作方式。那些開發人員習慣於在他們的Windows窗體上拖放控件,雙擊那些爲他們生成一些代碼的按鈕,在這些按鈕中放置他們的數據訪問邏輯等等。感謝WebForms,這種模式已轉換爲Web應用程序開發。 HTTP協議已成功隱藏在稱爲WebForms的抽象背後。例如,您不需要了解HTML,也不需要Javascript,甚至不需要CSS,以便使用WebForms創建網站,這非常棒,因爲該框架爲您抽象了所有這些內容。不幸的是,這樣做會阻止您輕鬆使用某些人在開發Web應用程序時可能需要的低級Web技術的全部功能。

ASP.NET MVC所做的一切基本上是去除了這種泄漏的抽象,並將www以其創建者的意圖帶入開發人員的行列。與經典的WebForms相比,ASP.NET MVC還不夠成熟,所以你不能指望找到相同的可用控件和小部件,但事情正在緩慢轉移。

我建議你從這裏開始ASP.NET MVC:http://asp.net/mvc。繼續,觀看視頻,玩弄樣品,看看ASP.NET MVC是否適合你。當然,如果你遇到一些特定的困難或問題,請毫不猶豫地回到這裏問問題。

+1

++。儘管WebForms維護狀態並具有回發的概念,但MVC會遷移回更多的普通Web模型,其中狀態不會持續存在,並且「回發」的概念不存在。 .NET MVC具有「助手」的概念,可以替代您習慣的服務器控件。搜索「WebGrid Helper」,這會讓你瞭解如何在MVC世界中完成任務。 – Khepri 2012-01-27 19:44:18

+1

而不是GridView看看jqGrid @ http://www.trirand.com/blog/ – 2012-01-27 19:52:57

+0

我同意MVC的好處,而不是泄漏的WebForms,但是MVC的方法太過分了,XML標記有很明顯的好處基於組件的封裝HTML並節省開發時間,可防止重寫大量重複的HTML代碼並增加一層邏輯(構建自適應/設備感知控件的能力)。 我認爲將C#寫入視圖並不是UI的自然編程實踐! – sam360 2014-12-23 14:46:04

3

其核心是促進解耦的模型視圖控制器(MVC)。這個想法是,您爲您的View(網頁)提供一個模型,其中包含所有需要呈現的數據。服務器控件緊密耦合。無論在MVC中還是沒有關於狀態的概念,或者「應該」都不是概念。

3

這就是MVC的一點。它消除了服務器控件提供的高級UI抽象,併爲您留下html和javascript。 (它也增加了一些很酷的模型綁定功能)

8

我太習慣於使用像GridView和MS圖表控件,我完全茫然我幾乎沒有給他們發展的控制。看起來好像重新開始。

在這種情況下,重新開始是

我已經經歷過類似的旅程。如果直接的HTML會嚇到你,請嘗試使用System.Web.UI.HtmlControls命名空間。這將允許您訪問標準HTML控件,但如果需要(如通過指定runat="server"屬性或將它們轉換爲等效的ASP.NET控件,您仍然可以將它們轉換爲服務器控件。)

除了Darin's answer之外,ASP.NET還存在另一個問題:你必須遵循微軟對網絡的看法,你喜歡GridView?它生成錯誤的HTML,它提供了Paging控件?更糟糕的是,即使你知道的很少關於HTML合規性,嵌套表應該會給你帶來寒戰。從某種意義上說,每個使用GridView的人都很幸運,微軟支持的遺留Web(以及Google和Mozilla的程度較低)來自這樣的上帝糟糕的起點

最後,總結一下:我的建議是,您嘗試僅使用HtmlControls來重寫網頁或開發新的Web應用程序(儘可能最好)。您可能必須學習一些JavaScript/jQuery,並且可能必須冒險進入AJAX世界,以使您的控件以您希望的方式運行。

將此用作MVC世界的踏腳石。你不會使用相同的技術(並且可能會刪除大量的JavaScript/jQuery),但它可以幫助你以更小,也許更容易被吸收的塊來改變你對web開發的看法。

但是最終,多少你喜歡你的ASP.NET控件,您將有自由,的更大程度和也將開發的網站,利用新技術,這將提供更多價值你的網站。

+0

如果你小心並告訴ASP.NET在web.config中使用xhtml標記(不記得確切的設置),那麼標記確實沒那麼糟糕。 – jrummell 2012-01-27 21:25:28

+0

我試過這個設置; 'GridView'仍然輸出分頁控制的嵌套表格。 – jwiscarson 2012-01-27 21:36:08

+1

我應該澄清一下,它會生成大部分有效的html。但是你是對的,它使用表格的方式太多了。 – jrummell 2012-01-27 21:38:30

0

我是MVC的新手,並且發現使用部分視圖在創建不適合_Layout的小型可重用UI元素方面類似。例如,滑塊,幻燈片,導航,特色部分,儘管你可以使用@section,我發現部分視圖更有益。這個概念使我能夠創建可重用的庫,我可以輕鬆地切換並在其他項目中使用。對我來說,這與控件類似,儘管有爭論和反對這種類比。

相關問題