web-dev-qa-db-fra.com

Quand utiliser runat = "server" sur du HTML normal

Est-il jamais approprié d'utiliser runat = "server" sur un élément HTML standard au lieu d'un véritable contrôle ASP.NET? J'ai un contrôle total sur la définition du html/texte de l'élément normal, alors pourquoi ne l'utiliserais-je pas à la place d'un contrôle WebForms ASP.NET "maladroit"?

Si l'un est meilleur que l'autre, quelques points d'intérêt que j'aimerais savoir:

  • Différences de performances
  • Différences de fonctionnalité
  • D'autres différences pas si évidentes?

Un exemple de différence:

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

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

Les deux sont des contrôles serveur ASP.NET. Celles correspondant aux éléments HTML sont dans le System.Web.UI.HtmlControls namespace, et les contrôles Web sont dans le System.Web.UI.WebControls espace de noms.

Les contrôles HTML sont plus légers et correspondent exactement à un élément HTML, tandis que les contrôles Web ont plus de fonctionnalités et peuvent être rendus sous forme d'éléments HTML différents selon les capacités du navigateur et les paramètres du contrôle.

Un contrôle HTML s'affiche en tant qu'élément HTML unique, tandis qu'un contrôle Web est rendu sous la forme de zéro ou plusieurs éléments HTML. Le contrôle Literal par exemple n'est pas rendu en tant qu'élément, il ne produit que son texte. Il existe d'autres contrôles qui ne rendent aucun élément par eux-mêmes, comme les contrôles Repeater et PlaceHolder. D'un autre côté, le contrôle CheckBoxList par exemple est rendu sous la forme de plusieurs éléments HTML, d'un table comme conteneur et input éléments pour chaque case à cocher à l'intérieur.

Un exemple de contrôle rendu à l'aide de différents éléments est le contrôle TextBox, qui sera rendu sous la forme d'un élément input ou textarea en fonction de son TextMode propriété.

Les contrôles Web ont plus de fonctionnalités, mais utilisent également plus de ressources. Ils ont plus de propriétés et prennent en charge des éléments tels que les thèmes et la liaison de données. De nombreux contrôles Web placent les données dans le ViewState, qui est envoyé dans le cadre de la page. Si vous ne faites pas attention, le ViewState peut devenir assez volumineux et affecter le temps de chargement de la page.

18
Guffa

La seule raison pour laquelle j'ai utilisé les contrôles html du serveur, c'est quand j'avais besoin de la flexibilité d'écrire mon propre html mais que j'avais encore besoin d'accéder à ses propriétés dans le code derrière.

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

En code derrière:

mySpecialHtml.InnerHtml = "something else";
11
jrummell

L'analyseur ASP.NET interprète les éléments html standard avec la balise runat = "server" en tant que contrôles serveur html. Exemple:

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

est interprété comme

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

Donc, sachez que si vous utilisez runat = "server", vous utilisez le contrôle HTML Server correspondant.

De plus, ASP.NET contient un ensemble de contrôles serveur Web, c'est-à-dire le contrôle HyperLink, qui fournissent plus de fonctionnalités, plus de propriétés, d'événements, etc. mais peuvent être plus lents dans certains cas.

4
Raman Zhylich

Je préfère utiliser les contrôles html quand il y a plus de travail côté client, et utiliser les contrôles asp.net quand il y a plus de travail côté serveur (code derrière).

1
Waqar Janjua

Je crois qu'ASP.NET utilise un ensemble différent de contrôles de serveur Web qui a généralement beaucoup plus de fonctionnalités, mais cela dépend vraiment de vos préférences. Si votre travail est principalement côté serveur, je m'en tiendrai aux contrôles ASP.NET.

1
jzacharia