Warum muss ich runat="server"
auf allen meinen ASP.NET-Steuerelementen angeben, server
ob es sich um ein obligatorisches Attribut handelt und die einzige Option ist, die in meinen begrenzten Kenntnissen über ASP.NET verfügbar ist, und ich erhalte eine Fehlermeldung, wenn ich es nicht verwende?
Ich verstehe, dass ich es optional für meine HTML-Tags verwenden kann, und ich verstehe das Client / Server-Paradigma und was es tatsächlich spezifiziert.
Handelt es sich um ein redundantes Tag, das nur impliziert werden könnte, wenn das Steuerelement ein ASP.NET-Steuerelement ist, oder liegt ein Grund zugrunde?
asp.net
runatserver
Johnc
quelle
quelle
Web.config
könnte, eine geeignete Problemumgehung. Während des Analyseprozesses können bei Bedarf Standardattribute in das DOM eingefügt werden. Ich werde mit dieser Idee spielen ...Antworten:
Ich habe immer geglaubt, dass es mehr für das Verständnis gibt, dass Sie ASP.NET-Tags und HTML-Tags mischen können und HTML-Tags die Option haben, entweder zu sein
runat="server"
oder nicht. Es tut nichts weh, das Tag zu belassen, und es verursacht einen Compilerfehler, um es zu entfernen. Je mehr Dinge Sie über die Web-Sprache sagen, desto weniger einfach ist es für einen angehenden Programmierer, sie zu lernen. Das ist so gut wie jeder Grund, ausführlich über Tag-Attribute zu sein.Dieses Gespräch wurde auf Mike Schinkels Blog zwischen ihm und Talbot Crowell von Microsoft National Services geführt. Die relevanten Informationen sind unten aufgeführt (erster Absatz aufgrund von Grammatikfehlern in der Quelle umschrieben):
Es geht weiter:
Er fährt fort:
quelle
Normalerweise rate ich nicht gern, aber ich werde es tun ...
Wenn Sie sich an den .NET-Marketing-Hype von Microsoft damals (2001?) Erinnern, war es schwer zu sagen, was .NET überhaupt war. War es ein Server? eine Programmierplattform? eine Sprache? etwas ganz neues? Angesichts der Anzeigen war es mehrdeutig alles, was Sie wollten - es löste nur jedes Problem, das Sie haben könnten.
Ich vermute also, dass es eine versteckte Vision gab, dass ASP.NET-Code überall ausgeführt werden kann - serverseitig oder clientseitig, in einer Kopie von Internet Explorer, die an die .NET-Laufzeit gebunden ist. runat = "server" ist nur ein Überbleibsel, das zurückgelassen wurde, weil sein clientseitiges Äquivalent es nie in die Produktion geschafft hat.
Erinnerst du dich an diese seltsamen Anzeigen?
Verwandte: Artikel aus dem Register mit etwas .NET-Geschichte.
quelle
Nicht alle Steuerelemente, die in einer Seite enthalten sein können, müssen auf dem Server ausgeführt werden. Beispielsweise:
<INPUT type="submit" runat=server />
Dies ist im Wesentlichen dasselbe wie:
<asp:Button runat=server />
Entfernen Sie das Tag runat = server aus dem ersten und Sie haben eine Standard-HTML-Schaltfläche, die im Browser ausgeführt wird. Es gibt Gründe dafür und dagegen, ein bestimmtes Steuerelement auf dem Server auszuführen, und es gibt für ASP.NET keine Möglichkeit, basierend auf dem von Ihnen eingeschlossenen HTML-Markup "anzunehmen", was Sie möchten. Es könnte möglich sein, den runat = Server für die
<asp:XXX />
Familie der Steuerelemente zu "schließen" , aber ich vermute, dass Microsoft dies als Hack für die Markup-Syntax und die ASP.NET-Engine betrachten würde.quelle
Microsoft Msdn-Artikel The Forgotten Controls: HTML Server Controls erläutert die Verwendung von runat = "server" anhand eines Beispiels für ein Textfeld,
<input type="text">
indem es in konvertiert wird<input type="text" id="Textbox1" runat="server">
Kurz gesagt, um den programmgesteuerten Zugriff auf das HTML-Element zu ermöglichen, fügen Sie
runat="server"
es hinzu.quelle
Mein Verdacht ist, dass es damit zu tun hat, wie serverseitige Steuerelemente während der Verarbeitung identifiziert werden. Anstatt jedes Steuerelement zur Laufzeit anhand seines Namens überprüfen zu müssen, um festzustellen, ob eine serverseitige Verarbeitung durchgeführt werden muss, wird die interne Knotendarstellung nach Tag ausgewählt. Der Compiler überprüft, ob alle Steuerelemente, für die Server-Tags erforderlich sind, diese während des Validierungsschritts haben.
quelle
HTML-Elemente in ASP.NET-Dateien werden standardmäßig als Text behandelt. Um diese Elemente programmierbar zu machen, fügen Sie
runat="server"
dem HTML-Element ein Attribut hinzu. Dieses Attribut gibt an, dass das Element als Serversteuerelement behandelt werden soll.quelle
Es ist da, weil alle Steuerelemente in ASP .NET von System.Web.UI.Control erben, das das Attribut "runat" hat.
In der Klasse System.Web.UI.HTMLControl ist das Attribut nicht erforderlich, in der Klasse System.Web.UI.WebControl ist das Attribut jedoch erforderlich.
edit: lass mich genauer sein. Da asp.net so ziemlich eine Zusammenfassung von HTML ist, benötigt der Compiler eine Art Direktive, damit er weiß, dass ein bestimmtes Tag serverseitig ausgeführt werden muss. Wenn dieses Attribut nicht vorhanden wäre, würde es nicht zuerst auf dem Server verarbeitet werden müssen. Wenn es nicht vorhanden ist, wird davon ausgegangen, dass es sich um ein reguläres Markup handelt, und es wird an den Client übergeben.
quelle
Ich denke, dass Microsoft diese Unklarheit beheben kann, indem der Compiler das Runat-Attribut hinzufügt, bevor die Seite jemals kompiliert wird asp: Präfix für Tags, sodass sich der Entwickler keine Sorgen machen muss.
quelle
Wenn Sie es für normale HTML-Tags verwenden, bedeutet dies, dass Sie sie programmgesteuert in Ereignishandlern usw. bearbeiten können, z. B. die href oder Klasse eines Ankertags beim Laden der Seite ändern. Tun Sie dies nur, wenn Sie müssen, da Vanille-HTML-Tags geh schneller.
Was Benutzer- und Serversteuerungen angeht, nein, sie funktionieren einfach nicht ohne sie, ohne sich mit den Innereien des Aspx-Präprozessors befasst zu haben. Sie konnten nicht genau sagen, warum, würden aber davon ausgehen, dass sie aus wahrscheinlich guten Gründen gerade geschrieben haben Der Parser sucht auf diese Weise nach Dingen, die explizit als "etwas tun" gekennzeichnet sind.
Wenn @JonSkeet irgendwo in der Nähe ist, kann er wahrscheinlich eine viel bessere Antwort geben.
quelle
Beim Senden der Daten an den ASP.NET-Webserver werden die als Runat = "Server" genannten Steuerelemente in der Serveranwendung als Dot Net-Objekte dargestellt. Sie können den Code manuell in HTML-Steuerelemente eingeben oder die Option Als Server ausführen verwenden, indem Sie mit der rechten Maustaste in die Entwurfsansicht klicken. ASP.NET-Steuerelemente erhalten dieses Attribut automatisch, sobald Sie es aus der Toolbox ziehen, wo dies normalerweise bei HTML-Steuerelementen nicht der Fall ist.
quelle
Ziemlich redundantes Attribut, wenn man bedenkt, dass das "asp" -Tag offensichtlich ein ASP-Element ist und ausreichen sollte, um es als serverseitig zugängliches Element zu identifizieren.
An anderer Stelle wurden jedoch normale Tags erhöht, die im CodeBehind verwendet werden sollen.
quelle
Ich bin gerade durch Ausprobieren zu diesem Schluss gekommen: runat = "server" wird benötigt, um zur Laufzeit auf der Serverseite auf die Elemente zuzugreifen. Entfernen Sie sie, kompilieren Sie sie neu und beobachten Sie, was passiert.
quelle
runat="Server"
Gibt an, dass für das HTML-Steuerelement ein Postback an den Server erfolgt.Web Forms
postback
signalisieren dem Server ständig, ein Seitensteuerungsereignis zu verarbeiten..NET
MVC
Seiten NICHT verwendenpostback
(außer für ein Formular"submit"
).MVC
verlässt sichJQUERY
darauf, die Seite auf der Clientseite zu verwalten (wodurch der Bedarf an vielem umgangen wirdpostback
Nachrichten an den Server ).Also:
.NET
Web Forms ... verwenden"runat"
Attribute häufig im Seiten-Markup..NET
MVC
kaum jemals verwendet"runat"
Attribut im Seiten-Markup.Hoffe das hilft zu klären warum
runat
es notwendig ist ...quelle