208 votes

Pourquoi les formulaires Web ASP.NET doit-il le Runat = « Server » attribut ?

Pourquoi dois-je spécifier runat="server" sur tous mes ASP.NET les contrôles de quand il est un attribut obligatoire et server est la seule option disponible à ma connaissance limitée de ASP.NET et j'obtiens une erreur si je ne l'utilise pas?

Je ne comprends que je peux éventuellement l'utiliser sur mon balises HTML, et je ne comprends client/serveur de paradigme et de ce qu'elle est réellement la spécification.

Est-il redondant balise qui pourrait tout simplement être implicites par le contrôle d'un ASP.NET de contrôle, ou est-il une raison sous-jacente?

112voto

George Stocker Points 31258

J'ai toujours cru que c'était là plus pour la compréhension que vous pouvez mélanger ASP.NET les balises et les Balises HTML et les Balises HTML ont la possibilité d'être runat="server" ou pas. Il n'est pas mal quoi que ce soit de quitter le tag, et il provoque une erreur de compilation, de le sortir. Le plus de choses à vous dire sur le web langue, moins il est facile pour un programmeur en herbe de venir et d'apprendre. C'est aussi une très bonne raison d'être prolixe sur les attributs de la balise.

Cette conversation a eu sur Mike Schinkel du Blog entre lui-même et Talbot Crowell de Microsoft Services Nationaux. L'information pertinente est ci-dessous (premier alinéa paraphrasé en raison d'erreurs grammaticales dans la source):

[...] mais l'importance de l' <runat="server"> est plus pour des raisons de cohérence et d'extensibilité.

Si le développeur a marquer certains tags (viz. <asp: />) pour la ASP.NET Moteur à ignorer, puis il y a aussi le problème potentiel de l'espace de noms de collisions entre des balises et des améliorations futures. En exigeant de l' <runat="server"> d'attribut, ce qui est nié.

Il continue:

Si <runat=client> a été nécessaire pour tous les côté client balises, l'analyseur serait nécessaire pour analyser toutes les balises et la bande de l' <runat=client> partie.

Il continue:

Actuellement, Si ma supposition est correcte, l'analyseur ignore simplement tout le texte (tags ou pas tags), sauf si c'est un tag avec le runat=server d'attribut ou d'un "<%" préfixe ou ssi "<!– #include... (...) Aussi, depuis ASP.NET est conçu pour permettre la séparation des concepteurs de sites web (foo.aspx) à partir de développeurs web (foo.aspx.vb), les concepteurs web peuvent utiliser leurs propres outils du concepteur web à lieu de HTML et de JavaScript côté client sans avoir à connaître ASP.NET spécifiques des balises ou des attributs.

33voto

Corbin March Points 18522

D'habitude je n'aime pas le deviner, mais je vais sur celui-ci...

Si vous vous souvenez de Microsoft .NET marketing hype retour dans la journée (2001?), c'était difficile à dire quoi .NET même a été. Était-il un serveur? une plateforme de programmation? une langue? quelque chose de nouveau entièrement? Compte tenu de l'ads, il a été d'une manière ambiguë, tout ce que vous vouliez qu'il soit, il vient de résoudre tout problème que vous pourriez avoir.

Donc, ma conjecture est qu'il y avait un caché grande vision que ASP.NET le code peut s'exécuter de n'importe où - côté serveur OU côté client, dans une copie de Internet Explorer liée à l' .NET runtime. runat="server" n'est qu'un vestige de vestige de, gauche derrière parce que c'est côté client, l'équivalent n'a jamais été rendue à la production.

Souvenez-vous de ceux bizarre annonces?

Connexe: Article Du Registre avec certains .NET histoire.

13voto

Dave Swersky Points 25958

Pas tous les contrôles qui peuvent être inclus dans une page doit être exécuté sur le serveur. Par exemple:

<INPUT type="submit" runat=server />

C'est essentiellement le même que:

<asp:Button runat=server />

Supprimer la runat=server balise à partir de la première, et vous avez un standard bouton HTML qui s'exécute dans le navigateur. Il y a des raisons pour et contre l'exécution d'un contrôle particulier sur le serveur, et il n'existe aucun moyen pour ASP.NET à "assumer" ce que vous voulez basé sur le code HTML à inclure. Il pourrait être possible de "déduire" runat=server pour l' <asp:XXX /> de la famille des contrôles, mais ma conjecture est que Microsoft serait de considérer qu'un hack pour le balisage de la syntaxe et ASP.NET moteur.

3voto

tvanfosson Points 268301

Mon soupçon est que cela a à voir avec les contrôles côté serveur comment sont identifiés au cours du traitement. Plutôt que de devoir vérifier chaque contrôle à l’exécution de nom pour déterminer si le traitement côté serveur doit être fait, il fait une sélection sur la représentation de noeud interne par tag. Les compilateur de contrôles pour s’assurer que tous les contrôles qui nécessitent balises serveur ont eux pendant l’étape de validation.

1voto

seanb Points 5267

Si vous l'utilisez sur normal des balises html, cela signifie que vous pouvez manipuler par programmation dans les gestionnaires d'événements, etc, par exemple, changer le href de classe ou d'une balise d'ancrage au chargement de la page... que faire si vous avez, parce que la vanille balises html aller plus vite.

Aussi loin que les contrôles de l'utilisateur et des contrôles serveur, non, ils ont juste l'habitude de travailler sans eux, sans avoir puisé dans les entrailles de la aspx préprocesseur, ne pouvait pas dire exactement pourquoi, mais prendrait une supposition que probablement pour de bonnes raisons, ils ont juste écrit l'analyseur de cette façon, la recherche de choses explicitement marqués comme "faire quelque chose".

Si @JonSkeet est autour de n'importe où, il sera probablement en mesure de fournir une bien meilleure réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X