¿Por qué debo especificar runat="server"
en todos mis controles ASP.NET cuando es un atributo obligatorio y server
es la única opción disponible en mi conocimiento limitado de ASP.NET, y obtengo un error si no lo uso?
Entiendo que opcionalmente puedo usarlo en mis etiquetas HTML, y entiendo el paradigma cliente / servidor y lo que realmente está especificando.
¿Es una etiqueta redundante que podría implicar simplemente que el control es un control ASP.NET, o hay una razón subyacente?
asp.net
runatserver
johnc
fuente
fuente
Web.config
, sería una solución alternativa adecuada. Durante el proceso de análisis, los atributos predeterminados se pueden inyectar en el DOM cuando sea necesario. Voy a jugar con esta idea ...Respuestas:
Siempre he creído que estaba allí más para entender que puedes mezclar etiquetas ASP.NET y etiquetas HTML, y las etiquetas HTML tienen la opción de ser
runat="server"
o no. No hace daño dejar nada la etiqueta, y provoca que un error del compilador lo elimine. Cuanto más implicas sobre el lenguaje web, menos fácil es para un programador en ciernes entrar y aprenderlo. Esa es una razón tan buena como cualquiera para ser detallado sobre los atributos de etiqueta.Esta conversación tuvo lugar en el Blog de Mike Schinkel entre él y Talbot Crowell de los Servicios Nacionales de Microsoft. La información relevante está debajo (primer párrafo parafraseado debido a errores gramaticales en la fuente):
Continúa:
Él continúa:
fuente
Por lo general, no me gusta adivinar, pero voy a hacer esto ...
Si recuerdas el bombo publicitario de .NET de Microsoft en el pasado (2001?), Fue difícil saber qué era .NET. ¿Fue un servidor? una plataforma de programación? ¿un idioma? algo completamente nuevo? Teniendo en cuenta los anuncios, era ambiguamente cualquier cosa que quisieras que fuera, simplemente resolvió cualquier problema que pudieras tener.
Entonces, supongo que había una gran visión oculta de que el código ASP.NET podría ejecutarse en cualquier lugar, del lado del servidor O del lado del cliente, en una copia de Internet Explorer vinculada al tiempo de ejecución de .NET. runat = "server" es solo un vestigio remanente, dejado atrás porque su equivalente del lado del cliente nunca llegó a producción.
¿Recuerdas esos anuncios raros?
Relacionado: Artículo de The Register con algo de historia de .NET.
fuente
No todos los controles que se pueden incluir en una página deben ejecutarse en el servidor. Por ejemplo:
<INPUT type="submit" runat=server />
Esto es esencialmente lo mismo que:
<asp:Button runat=server />
Elimine la etiqueta runat = server de la primera y tendrá un botón HTML estándar que se ejecuta en el navegador. Hay razones a favor y en contra de ejecutar un control particular en el servidor, y ASP.NET no tiene forma de "asumir" lo que desea en función del marcado HTML que incluya. Podría ser posible "inferir" el servidor runat = para la
<asp:XXX />
familia de controles, pero supongo que Microsoft consideraría que hackea la sintaxis de marcado y el motor ASP.NET.fuente
El artículo de Microsoft Msdn The Forgotten Controls: HTML Server Controls explica el uso de runat = "server" con un ejemplo en el cuadro de texto
<input type="text">
al convertirlo a<input type="text" id="Textbox1" runat="server">
En resumen, para habilitar el acceso programático al elemento HTML, agréguelo
runat="server"
.fuente
Mi sospecha es que tiene que ver con cómo se identifican los controles del lado del servidor durante el procesamiento. En lugar de tener que verificar cada control en tiempo de ejecución por nombre para determinar si es necesario realizar el procesamiento del lado del servidor, realiza una selección en la representación del nodo interno por etiqueta. El compilador verifica para asegurarse de que todos los controles que requieren etiquetas de servidor las tengan durante el paso de validación.
fuente
Los elementos HTML en los archivos ASP.NET, por defecto, se tratan como texto. Para hacer que estos elementos sean programables, agregue un
runat="server"
atributo al elemento HTML. Este atributo indica que el elemento debe tratarse como un control de servidor.fuente
Está allí porque todos los controles en ASP .NET heredan de System.Web.UI.Control que tiene el atributo "runat".
en la clase System.Web.UI.HTMLControl, el atributo no es obligatorio, sin embargo, en la clase System.Web.UI.WebControl es obligatorio.
editar: déjame ser más específico. dado que asp.net es básicamente un resumen de HTML, el compilador necesita algún tipo de directiva para que sepa que la etiqueta específica debe ejecutarse en el lado del servidor. si ese atributo no estuviera allí, entonces no sabría procesarlo primero en el servidor. Si no está allí, se supone que es un marcado regular y se lo pasa al cliente.
fuente
Creo que Microsoft puede solucionar esta ambigüedad haciendo que el compilador agregue el atributo runat antes de que la página se compile, algo así como el borrado de tipo que tiene Java con los genéricos, en lugar de borrar, podría estar escribiendo runat = server donde sea que vea asp: prefijo para etiquetas, por lo que el desarrollador no tendrá que preocuparse por eso.
fuente
Si lo usa en etiquetas html normales, significa que puede manipularlas programáticamente en controladores de eventos, etc., por ejemplo, cambiar el href o la clase de una etiqueta de anclaje en la carga de la página ... solo haga eso si es necesario, porque las etiquetas html vanilla vaya más rápido.
En cuanto a los controles del usuario y los controles del servidor, no, simplemente no funcionarán sin ellos, sin haber profundizado en las entrañas del preprocesador aspx, no podría decir exactamente por qué, pero supondrían que probablemente por buenas razones, simplemente escribieron el analizador de esa manera, buscando cosas marcadas explícitamente como "hacer algo".
Si @JonSkeet está en alguna parte, probablemente podrá proporcionar una respuesta mucho mejor.
fuente
Al enviar los datos al servidor web ASP.NET, los controles mencionados como Runat = "servidor" se representarán como objetos Dot Net en la aplicación del servidor. Puede escribir manualmente el código en los controles HTML o puede usar la opción Ejecutar como servidor haciendo clic derecho en la vista de diseño. Los controles ASP.NET obtendrán automáticamente este atributo una vez que lo arrastre desde la caja de herramientas donde generalmente los controles HTML no lo hacen.
fuente
Atributo bastante redundante, teniendo en cuenta que la etiqueta "asp" es obviamente un elemento ASP y debería ser suficiente para identificarlo como un elemento accesible del lado del servidor.
En otros lugares, sin embargo, solía elevar las etiquetas normales para usar en el código subyacente.
fuente
Acabo de llegar a esta conclusión por prueba y error: runat = "server" es necesario para acceder a los elementos en tiempo de ejecución en el lado del servidor. Elimínalos, vuelve a compilar y observa lo que sucede.
fuente
runat="Server"
indica que se realizará una devolución al servidor para el "control" HTML.Los formularios web se usan
postback
constantemente para indicar al servidor que procese un evento de control de página..NET
MVC
NO use las páginaspostback
(excepto un formulario"submit"
).MVC
dependeJQUERY
de administrar la página en el lado del cliente (evitando así la necesidad de muchospostback
mensajes al servidor).Entonces:
.NET
Web Forms ... usa"runat"
mucho el atributo en el marcado de la página..NET
MVC
casi nunca usa"runat"
atributo en el marcado de la página.Espero que esto ayude a aclarar por qué
runat
es necesario ...fuente