2010-04-12 76 views
3

我已閱讀了這個問題中的信息:Controls versus standard HTML但我還是很困惑。ASP .NET混淆 - 服務器控件

情況是我被要求做一個web項目,我做了一個嚮導。當我完成這個項目時,每個人都問爲什麼我使用了<asp:Wizard...>。我認爲這是被問到的,但顯然不是,所以在這之後,我被引導認爲服務器控件只是原型工具。

但是,下一個項目我通過C#代碼隱藏完成了我的數據庫查詢,並通過html加載了結果。然後問我爲什麼沒有使用gridview和數據集。

有沒有人有權利和利弊的列表,他們爲什麼會選擇使用特定的html控件在特定的服務器控件,爲什麼?我想我正在尋找一個列表...什麼服務器控件可以使用,爲什麼?

編輯: 我想這個問題是開放式的,所以我會澄清一些更具體的問題......

  1. 是否還好非常簡單易用的控制,如ASP:標籤或做這些最終會浪費空間?看起來好像很難在代碼中訪問html。

  2. 是否有幾個控件應該永遠不會被使用?

  3. 有沒有人有一個很好的資源,將顯示每個控件的利弊?

回答

3

服務器控件依靠ViewState中,限制靈活性

服務器控件分別來介紹的WinForms開發者網絡開發的強大工具。 Server Controls提供的主要優勢是狀態感和事件驅動的開發模式。然而,自從引入WebForms和服務器控件以來,Web開發的狀態一直在成熟,整體而言,它們正在受到increasingly critical view的挑戰。

服務器控件的主要問題是他們試圖抽象Web的行爲太多,這樣做依靠數據和服務器資源來執行他們的魔力。 ViewState數據過度使用會嚴重增加頁面的大小,導致performance problems

現在有可能到opt out of ViewState,但是到那時只需求助於常規的HTML控件就更好了。

使用HTML控件,您可以精確控制網頁的內容,並且在網頁上您想要的行爲方面具有更大的靈活性。服務器控件提供有限的客戶端靈活性,並強制在服務器上執行大量的工作,這些工作可以很容易地在瀏覽器中以良好的JavaScript framework執行。

+0

非常有幫助 - 感謝所有的資源。 – Brandi 2010-04-15 16:51:21

+0

感謝您的投票。爭論雙方仍有很多爭議。一方面,服務器控件更容易設置,但另一方面,HTML控件提供更精細的控制,並可能更好地執行。這真的取決於你的情況。作爲一個經驗法則:如果您只是要顯示平面,只讀內容,請使用HTML控件或縮放後的服務器控件,例如Literal或Repeater而不是Label和GridView。此外,請嘗試在默認情況下禁用ViewState,並且只在選擇時提供明顯的優勢。 – Technobabble 2010-04-15 22:06:26

1
  1. 是否還好非常簡單易用的控制,如ASP:標籤或做這些 剛剛結束了浪費空間?看起來好像 就像在其他代碼背後很難訪問 html一樣。

如果您需要訪問服務器端代碼中的控件,請使用服務器控件。如果不是,不要。

  1. 是否有幾個控件不應該被使用?

不符合我的(中級)經驗。嚮導控件,一旦你知道如何使用它,就像廣告一樣工作(想象自己編寫所有的功能,然後做數學)。我已經使用了它,並且導致了一個平滑而實用的多頁註冊表單,中間保存了數據。

  • 沒有人有一個很好的資源,它會告訴我的 每個控制利弊?
  • 我不這樣做,但我建議你使用正確的情況下正確的控制。例如,研究Repeater和GridView之間的差異,並根據您的需要使用最佳選擇。

    當然有替代品。首先,MVC正在獲得動力。我個人還沒有承諾要學習它。就交互式表單和AJAX而言,許多.NET開發人員都選擇使用JQuery來進行任何驗證和任何AJAX(UpdatePanels易於使用且效率非常低),並使用JSON作爲服務器端的傳輸機制。

    +0

    嗯......如果你絕對需要,可以從代碼後面訪問html控件嗎? – Brandi 2010-04-15 16:13:30

    +0

    另外,感謝您的意見。我當時想知道是否有人比我更熟悉ASP .NET是使用這些控件的粉絲。 – Brandi 2010-04-15 16:53:32

    +0

    布蘭迪:是的。如果你想從服務器端訪問「常規」的html控件,你可以這樣做:

    。 (添加'runat'屬性)在這裏查看一個列表:http://www.w3schools.com/aspnet/aspnet_refhtmlcontrols.asp你只是不會得到你使用控件獲得的事件模型。 – sweaver2112 2010-04-16 15:09:42