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:
Un exemple de différence:
<asp:Literal ID="mySpecialHtml" runat="server" />
<div id="mySpecialHtml" runat="server" />
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.
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";
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.
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).
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.