真のASP.NETコントロールの代わりに、標準のHTML要素でrunat = "server"を使用することが適切かどうか。通常の要素のhtml/textの設定を完全に制御できるので、「不格好な」ASP.NET WebFormsコントロールの代わりにそれを使用しないのはなぜですか?
一方が他方よりも優れている場合、私が知りたいいくつかの興味深い点:
違いの例:
<asp:Literal ID="mySpecialHtml" runat="server" />
<div id="mySpecialHtml" runat="server" />
どちらもASP.NETサーバーコントロールです。 HTML要素に対応するものはSystem.Web.UI.HtmlControls
名前空間、およびWebコントロールはSystem.Web.UI.WebControls
名前空間。
HTMLコントロールはより軽量で、HTML要素に正確に対応していますが、Webコントロールはより多くの機能を備えており、ブラウザーの機能とコントロールの設定に応じて、さまざまなHTML要素としてレンダリングできます。
HTMLコントロールは単一のHTML要素としてレンダリングされますが、Webコントロールは0個以上のHTML要素としてレンダリングされます。たとえば、Literal
コントロールは要素としてレンダリングされず、テキストのみを出力します。 Repeater
およびPlaceHolder
コントロールのように、要素を単独でレンダリングしない他のコントロールがあります。一方、たとえば、CheckBoxList
コントロールは、いくつかのHTML要素、コンテナとしてのtable
、およびその内部の各チェックボックスのinput
要素としてレンダリングされます。
さまざまな要素を使用してレンダリングされるコントロールの例は、TextBox
コントロールです。これは、input
プロパティに応じて、textarea
またはTextMode
要素としてレンダリングされます。
Webコントロールにはより多くの機能がありますが、より多くのリソースを使用します。彼らはより多くのプロパティを持ち、テーマやデータバインディングのようなものをサポートしています。多くのWebコントロールは、ViewState
にデータを置きます。これは、ページの一部として送信されます。注意しないと、ViewState
が非常に大きくなり、ページのロード時間に影響する可能性があります。
サーバーのhtmlコントロールを使用した唯一の理由は、独自のhtmlを作成する柔軟性が必要だが、コードビハインドでそのプロパティにアクセスする必要がある場合です。
<div id="mySpecialHtml" runat="server" />
コードビハインド:
mySpecialHtml.InnerHtml = "something else";
ASP.NETパーサーは、runat = "server"タグ付きの標準のHTML要素をHTMLサーバーコントロールとして解釈します。例:
<a runat="server"></a>
として解釈されます
<asp:HtmlAnchor runat="server"></asp:HtmlAnchor>
したがって、runat = "server"を使用する場合は、対応するHTMLサーバーコントロールを使用していることに注意してください。
さらに、ASP.NETには、より多くの機能、プロパティ、イベントなどを提供する一連のWebサーバーコントロール、つまりHyperLinkコントロールが含まれていますが、場合によっては遅くなることがあります。
クライアント側の作業が多い場合はhtmlコントロールを使用し、サーバー側の作業が多い場合(コードビハインド)はasp.netコントロールを使用します。
ASP.NETは通常、より多くの機能を備えたWebサーバーコントロールの別のセットを使用していると思いますが、それは実際に好み次第です。仕事が主にサーバー側である場合は、ASP.NETコントロールを使用します。