Cuando declara una variable en un archivo .aspx de Web Forms, en realidad está declarando una variable local dentro de un método de representación generado automáticamente. ASP.NET genera métodos de representación por separado para todas las etiquetas marcadas runat="server"
, por lo que en realidad obtienes un método separado para tu elemento principal. Ahora, la variable que declaras solo puede existir en uno de estos métodos, de ahí el comportamiento "extraño".
Puede ver cómo funciona esto si pre-compile your application using aspnet_compiler.exe. Obtendrá archivos DLL compilados para cada una de sus páginas de formularios web; simplemente abra uno de ellos en Reflector para ver el código generado. Escribí un equivalente al mínimo su código con la variable declarada fuera de la etiqueta de la cabeza, y aquí está el nivel superior método que llegué imagen:
private void __Render__control1(HtmlTextWriter __w, Control parameterContainer)
{
string str = "scripts/";
__w.Write("\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n");
parameterContainer.Controls[0].RenderControl(__w);
__w.Write("\r\n<body>\r\n ");
parameterContainer.Controls[1].RenderControl(__w);
__w.Write("\r\n <script type=\"text/javascript\" src=\"");
__w.Write(str);
__w.Write("jquery-1.4.1.min.js\"></script>\r\n</body>\r\n</html>\r\n");
}
se ve que la variable que declaré (aquí llamado str
) es con este método, y está llamando a otros métodos para representar el encabezado (y un elemento de formulario marcado runat="server"
.)
Una solución rápida y sucia podría ser simplemente eliminar el runat="server"
de la etiqueta de la cabeza; Sin embargo, le recomendaría que declare una variable protegida en su clase de código subyacente para esto. Adición de una línea como esta en el archivo de código subyacente funcionaría:
protected string scriptPath, gkoConfig;
continuación, puede utilizar estas variables en cualquier parte de su código de formularios web.
cuando dice "clase de código subyacente", ¿qué quiere decir (por ejemplo, para una página como Index.aspx)? – serhio
La clase de código subyacente es la clase declarada en el archivo .cs para la página, por ejemplo, index.aspx.cs para index.aspx. –
bien, entendido. Comencé a aprender MVC directamente sin tener una experiencia ASP "clásica". Por eso no entendí al principio ... ¡Gracias! – serhio