Bloques de código en ASP.NET
Actualización: noviembre 2007
El modelo de página de un solo archivo ASP.NET parecido a la estructura de las páginas Active Server de los bloques de script que contienen código, se coloca después del HTML y las etiquetas de marcado especial se pueden utilizar en HTML. En este tema se describen los problemas implicados en la actualización del código de ASP a ASP.NET.
El modelo de página de código subyacente ASP.NET separa el código del bloque de script de las etiquetas de formato HTML y las de ASP.NET. Para obtener más información, vea Información general sobre sintaxis de páginas web ASP.NET. Para obtener información sobre la sintaxis de enlace de datos que permite enlazar valores de propiedad de control a los datos, vea Información general sobre las expresiones de enlace de datos.
Declaración de variables y procedimientos
Todos los procedimientos de ASP.NET y las variables globales se deberían declarar dentro de bloques <script > colocados antes de la etiqueta de apertura <html>, no entre los delimitadores de estilo de ASP <%...%>. Aún es posible declarar variables en bloques de representación <%...%> pero sólo otros bloques de representación de la página podrán tener acceso a ellas y no podrán utilizarse de forma global por otras funciones o procedimientos. Una página puede contener más de un bloque script, pero el lenguaje de programación debe ser el mismo en todos los bloques de la página.
El ejemplo de código siguiente es para una página ASP.NET que declara variables y procedimientos en un bloque de representación y de script. Si pasa una cadena de consulta a la página ASP.NET en la Dirección URL, la cadena de consulta se muestra en la página.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
' The following variables are visible to all procedures
' within the <script> block.
Dim str As String
Dim i, i2 As Integer
Function DoubleIt(ByVal inpt As Integer) As Integer
' The following variable is visible only within
' the DoubleIt procedure.
Dim factor As Integer = 2
DoubleIt = inpt * factor
End Function
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
<%
' The following local variable is visible only within this
' and other render blocks on the page.
Dim myVar
myVar = Request.QueryString
Response.Write("The querystring is " _
& Server.HtmlEncode(myVar.ToString()))
%>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
// The following variables are visible to all procedures
// within the <script> block.
String str;
int i;
int i2;
int DoubleIt(int inpt)
{
// The following variable is visible only within
// the DoubleIt procedure.
int factor = 2;
return inpt * factor;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
<%
// The following local variable is visible only within this
// and other render blocks on the page.
object myVar;
myVar = Request.QueryString;
Response.Write("The querystring is " +
Server.HtmlEncode(myVar.ToString()));
%>
</div>
</form>
</body>
</html>
Representación de texto
ASP.NET no admite funciones de representación. Si utiliza versiones anteriores de ASP, puede insertar código HTML literal en el cuerpo de un procedimiento, como se muestra en el ejemplo de código siguiente.
<% Sub SomeProcedure() %>
<H3> Render this line of bold text. </H3>
<% End Sub %>
Este código generaría un error en una página ASP.NET. En ASP.NET, tendría que escribir el código como se muestra a continuación:
<script runat=server>
Sub SomeProcedure()
Response.Write("<H3> Render this line in bold text.</H3>")
End Sub
</script>
Todo el código incluido entre las etiquetas <script>…</script>, excepto las declaraciones de variables globales, se debe encapsular dentro de procedimientos.
Procesamiento de páginas, carga y descarga
Con ASP, el código se delimitaba entre etiquetas <%...%> y el procesamiento de la página empezaba con la primera instrucción que seguía a la primera etiqueta <%>. Con ASP.NET, cualquier código que deba ser procesado tan pronto como se cargue la página debe incluirse en el evento intrínseco Page_Load. Todavía se puede escribir código en bloques <%...%>, pero se ejecutará en tiempo de representación (de arriba a abajo, como en ASP) después de cargar la página. Si se debe ejecutar código de inicialización, tiene que aparecer en el evento Page_Load, que el motor ASP.NET inicia inmediatamente después de que se haya cargado la página, tal como se muestra en el ejemplo de código siguiente.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
' Place all startup code here, including initialization of
' variables, preloading of controls, and loading of
' data from a database.
If Page.IsPostBack Then
Response.Write("<br />Page has been posted back.")
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
Hello.<br />
<asp:Button ID="Button1"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Response.Write("<br />Page has been posted back.");
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
Hello.<br />
<asp:Button ID="Button1"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
El evento intrínseco Page_Unload relacionado siempre es el último que se inicia durante la ejecución de la página y se puede utilizar para ejecutar código de limpieza de páginas.
Para obtener más información, vea Información general sobre el ciclo de vida de una página ASP.NET y Modelo de eventos de control de servidor Web ASP.NET.
Vea también
Conceptos
Información general sobre clases de páginas ASP.NET
Modelo de código de las páginas web ASP.NET
Script de cliente en páginas web ASP.NET
Información general sobre sintaxis de páginas web ASP.NET
Información general sobre el ciclo de vida de una página ASP.NET
Modelo de eventos de control de servidor Web ASP.NET