Warum braucht ASP.NET Webforms die runat = „server“ -Attribut?
-
08-07-2019 - |
Frage
Warum muß ich runat="server"
auf all meinem ASP.NET-Steuerelemente angeben, wenn es ein obligatorisches Attribut ist und server
ist die einzige Option in meiner begrenzten Kenntnis von ASP.NET, und ich erhalte eine Fehlermeldung, wenn ich nicht verwenden es?
Ich verstehe, dass ich es optional auf meinen HTML-Tags verwenden kann, und ich tue, um den Client / Server-Paradigma verstehen und was es tatsächlich angeben.
Ist es einen redundanten Tag, das nur durch die Kontrolle impliziert werden könnte eine ASP.NET Kontrolle zu sein, oder ist es ein zugrunde liegender Grund?
Lösung
Ich habe immer geglaubt, es ist mehr für das Verständnis, dass Sie ASP.NET-Tags und HTML-Tag mischen und HTML-Tags haben die Möglichkeit, entweder zu sein runat="server"
oder nicht. Es hat nichts schaden den Tag in verlassen, und es führt zu einem Compiler-Fehler, um sie aus. Je mehr Dinge, die Sie über die Web-Sprache bedeuten, ist das weniger leicht es für einen angehenden Programmierer zu kommen und es lernen. Das ist ein so guter Grund, wie jede ausführlichen über Tag-Attribut zu sein.
Andere Tipps
ich normalerweise nicht mag, erraten, aber ich werde auf diesem ...
Wenn Sie Microsoft .NET-Marketing-Hype wieder in den Tag (2001?) Erinnern, war es schwer zu sagen, was .NET selbst war. War es ein Server? eine Programmierplattform? eine Sprache? etwas Neues vollständig? Angesichts der Anzeigen, es war zweideutig alles, was Sie es sein wollte - es gelöst nur irgendein Problem haben Sie vielleicht
.Also, meine Vermutung war es eine versteckte große Vision, dass ASP.NET-Code überall laufen konnte - Server-Seite oder Client-Seite, in einer Kopie von Internet Explorer auf die .NET-Laufzeit gebunden. runat = „server“ ist nur ein rudimentäres Überbleibsel, zurückgelassen, weil sie gleichwertige clientseitige nie es zu Produktion.
Denken Sie daran, diese seltsamen Anzeigen?
Siehe auch: Artikel aus dem Register mit einiger .NET Geschichte .
Nicht alle Steuerelemente, die in einer Seite enthalten sein kann, muss auf dem Server ausgeführt werden. Zum Beispiel:
<INPUT type="submit" runat=server />
Dies ist im Wesentlichen der gleiche wie:
<asp:Button runat=server />
Entfernen Sie die runat = Server-Tag von der ersten und Sie haben eine Standard-HTML-Schaltfläche, die im Browser läuft. Es gibt Gründe für und gegen eine bestimmte Steuerung auf dem Server ausgeführt wird, und es gibt keine Möglichkeit für ASP.NET zu „übernehmen“, was wollen Sie basiert auf dem HTML-Markup Sie umfassen. Es könnte möglich sein, zu „schließen“ die runat = Server für die <asp:XXX />
Familie von Kontrollen, aber meine Vermutung ist, dass Microsoft, dass ein Hack auf die Markup-Syntax und ASP.NET-Engine in Betracht ziehen würde.
Microsoft MSDN-Artikel Die vergessene Controls: HTML-Serversteuerelementen Verwendung erklärt von runat = „server“ mit einem Beispiel auf Textfeld <input type="text">
durch Umwandlung <input type="text" id="Textbox1" runat="server">
Auf diese Weise wird Ihnen programmatischen Zugriff auf das HTML-Element auf der Server vor der Web-Seite erstellt und unten an den Client gesendet. Das HTML-Element muss ein id-Attribut enthalten. Dieses Attribut dient als Identität für das Element und ermöglicht es Ihnen, Elemente zu programmieren durch ihre spezifische IDs. Zusätzlich zu diesem Attribut, das HTML-Element enthalten Runat muss = "server". Dies teilt den Verarbeitungsserver, die das -Tag wird auf dem Server verarbeitet und nicht ein zu betrachten traditionelles HTML-Element.
Kurz gesagt, programmatischen Zugriff auf das HTML-Element hinzufügen runat="server"
, um es zu aktivieren.
Mein Verdacht ist, dass es zu tun hat mit, wie serverseitige Kontrollen während der Verarbeitung identifiziert werden. Anstatt jede Steuerung zur Laufzeit nach dem Namen zu überprüfen, um zu bestimmen, ob die serverseitige Verarbeitung durchgeführt werden muss, hat es eine Auswahl auf der interne Knotendarstellung nach Tag. Der Compiler überprüft, um sicherzustellen, dass alle Steuerelemente, die Server-Tags benötigen sie während der Validierungsschritt haben.
HTML-Elemente in ASP.NET-Dateien werden standardmäßig als Text behandelt. Um diese Elemente programmierbar zu machen, ein runat="server"
Attribut in das HTML-Element hinzuzufügen. Dieses Attribut gibt an, dass das Element sollte als Server Kontrolle behandelt werden.
Es ist da, weil alle Steuerelemente in ASP .NET von System.Web.UI.Control erben, die das "runat" -Attribut hat.
in der Klasse System.Web.UI.HTMLControl, wird das Attribut nicht erforderlich, jedoch in der Klasse System.Web.UI.WebControl das Attribut erforderlich ist.
Bearbeiten lassen Sie mich genauer sein. da asp.net so ziemlich ein abstrakte von HTML ist, muss der Compiler eine Art Richtlinie, so dass es weiß, dass bestimmte Tag-Server-Seite ausgeführt werden muss. wenn das Attribut nicht da ist, dann würde, ist nicht wissen, dass es auf dem Server zuerst zu verarbeiten. wenn sie nicht da ist es nimmt sie regelmäßig Markup ist und übergibt sie an den Client.
Ich denke, dass Microsoft diese Mehrdeutigkeit, indem die Compiler Runat Attribut hinzufügen beheben kann, bevor die Seite jemals kompiliert wird, so etwas wie die Art Löscht Sache, dass Java mit dem Generika hat, statt zu löschen, könnte es runat = Server schreiben wo immer es sieht asp:. Präfix für Tags, so müssen die Entwickler nicht darum kümmern
Wenn Sie es auf normalen HTML-Tags verwenden, bedeutet dies, dass Sie programmatisch sie in Event-Handler usw. manipulieren können, zB die href oder Klasse eines Anker-Tag beim Laden der Seite ändern ... nur tun, wenn Sie zu haben, weil Vanille-hTML-Tags schneller gehen.
Soweit Bedienelemente und Server-Steuerelemente, nein, sie ohne sie nur nicht funktionieren, ohne in die Innereien des aspx Präprozessor vertieft zu haben, nicht genau sagen konnte, warum, würde aber eine Vermutung, dass für wahrscheinlich gute Gründe nehmen, sie schrieben nur den Parser, die Art und Weise, für Dinge suchen explizit als „etwas tun“ gekennzeichnet.
Wenn @JonSkeet um überall ist, wird er wahrscheinlich in der Lage sein, eine viel bessere Antwort zu geben.
Wenn Sie die Daten auf ASP.NET Web Server Vorlage der genannten Kontrollen als Runat = „Server“ als Dot Net Objekte in Server-Anwendung dargestellt werden. Sie können manuell den Code in HTML-Steuerelemente eingeben oder kann sonst verwenden Ausführen als Server Option durch einen Rechtsklick in der Entwurfsansicht. ASP.NET-Steuerelemente automatisch dieses Attribut erhalten, sobald Sie es aus Toolbox ziehen, wo in der Regel HTML-Steuerelemente nicht.
Pretty redundantes Attribut, das „asp“ Tages unter Berücksichtigung ist offensichtlich ein Element ASP und soll genug sein, um es als Server-Seite zugänglich Element zu identifizieren.
In anderen Ländern aber es verwendet, um normale Tags zu erheben in der Code-Behind verwendet werden.
Ich komme gerade zu dieser Schlussfolgerung durch Trial-and-error: Runat = „server“ benötigt wird, um die Elemente zur Laufzeit auf Server-Seite zuzugreifen. Entfernen Sie sie, neu kompilieren und beobachten, was passiert.
runat="Server"
zeigt ein Postback an den Server für die HTML auftreten wird "Kontrolle".
Web Forms verwendet postback
ständig den Server zu signalisieren, eine Seite Steuer Ereignis zu verarbeiten.
.NET
MVC
Seiten Verwenden Sie KEINE postback
(mit Ausnahme einer Form "submit"
). MVC
stützt sich auf JQUERY
die Seite, auf der Client-Seite zu verwalten (und damit die Notwendigkeit für eine Menge postback
Nachrichten an den Server zu umgehen).
So:
.NET
Web Forms ... Verwendung "runat"
viel in der Seite Markup-Attribut.
.NET
MVC
so gut wie nie verwendet "runat"
Attribut in der Seite Markup.
Hope, das hilft erklären, warum runat
notwendig ist ...