2012-07-12 42 views
19

在標準HTML元素上使用runat =「server」而不是真正的ASP.NET控件是否合適?我完全可以控制設置普通元素的html/text,所以我爲什麼不使用它來代替「笨拙的」ASP.NET WebForms控件?何時使用普通HTML上的runat =「server」

如果一個比其他更好的,一些感興趣的點,我想知道:

  • 性能差異
  • 功能差異
  • 其他方面的差異不那麼明顯?

一個例子區別:

<asp:Literal ID="mySpecialHtml" runat="server" /> 

<div id="mySpecialHtml" runat="server" /> 

回答

16

兩者都是ASP.NET服務器控件。與HTML元素對應的元素位於System.Web.UI.HtmlControls名稱空間中,Web控件位於System.Web.UI.WebControls名稱空間中。

HTML控件更輕量且完全對應於HTML元素,而Web控件具有更多功能並可根據瀏覽器功能和控件的設置呈現爲不同的HTML元素。

HTML控件呈現爲單個HTML元素,而Web控件呈現爲零個或多個HTML元素。例如,Literal控件不是呈現爲元素,而是僅輸出其文本。還有其他控件不會自己渲染任何元素,如RepeaterPlaceHolder控件。另一方面,CheckBoxList控件例如呈現爲多個HTML元素,作爲容器的table和其中每個複選框的input元素。

正在使用不同的元件呈現的控制的一個例子是TextBox控制,這將被呈現或者作爲input或取決於其TextMode屬性textarea元件。

Web控件具有更多的功能,但也使用更多的資源。他們擁有更多的屬性並支持主題和數據綁定等。許多Web控件將數據放入ViewState中,該數據作爲頁面的一部分發送。如果您不小心,ViewState會變得非常大,並影響頁面的加載時間。

10

我已經使用服務器HTML控件的唯一原因是,當我需要寫我自己的HTML的靈活性,但仍需要訪問它的屬性在後面的代碼。

<div id="mySpecialHtml" runat="server" /> 

在後面的代碼:

mySpecialHtml.InnerHtml = "something else"; 
1

我更喜歡使用HTML控件存在於客戶端更多的工作時,和使用asp.net控件存在於服務器端更多的工作時(代碼背後)。

4

ASP.NET解析器將標準html元素w/runat =「server」標籤解釋爲html服務器控件。例如:

<a runat="server"></a> 

被解釋爲

<asp:HtmlAnchor runat="server"></asp:HtmlAnchor> 

所以,要知道,如果你使用RUNAT = 「服務器」 比您正在使用相應的HTML服務器控件。

此外,ASP.NET包含一組Web服務器控件,即HyperLink控件,它提供更多功能,更多屬性,事件等,但在某些情況下可能會更慢。

+0

+1有些人認爲向HTML控件添加runat =「server」並不會改變任何內容,事實上,他們正在將此控件轉換爲服務器控件。 – 2012-07-12 21:45:21

1

我相信ASP.NET使用了一組不同的Web服務器控件,它們通常具有更多的功能,但這完全取決於您的偏好。如果你的工作主要是服務器端,我會堅持使用ASP.NET控件。

相關問題