Los scriptlets son fragmentos de código que figuran en una página ASPX. Están delimitados por marcadores, que los distinguen de las secuencias HTML.
ASP.NET cuenta con cuatro tipos de scriptlets:
<% instructions %> | Instrucciones ejecutadas de arriba a abajo, anidadas en el código HTML. |
<%= expression %> | Expresión evaluada durante el renderizado de la página. |
<%# expression %> | Expresión evaluada cuando se invoca el método de la página o del control DataBind(). |
<%$ expression %> | Expresión analizada en tiempo de compilación de la página y evaluada tras cada petición. |
Tabla de contenidos
Los bloques de instrucciones <% instructions %>
Estos bloques de instrucciones se ejecutan durante la visualización de la página. Pueden influir en la fabricación de secuencias HTML, tal y como muestra el siguiente ejemplo de código anidado:
<%
int i;
string[] dias = { "lunes", "martes", "miércoles", "jueves",
"viernes", "sábado", "domingo" };
for(i=0; i<dias.Length; i++)
{
%>
<li><%= dias[i] %></li>
<% } %>
Las expresiones <%= expression %>
Expresiones que figuren entre <%= y%> se evalúan sistemáticamente en el contexto de ejecución. Puede tratarse de valores literales, de variables o de llamadas a métodos.
<li><%= dias[i] %></li>
<%= DateTime.Now.ToLongTimeString() %>
Las expresiones anidadas <%# expression %>
Desde un punto de vista sintáctico, podemos considerar las expresiones anidadas <%# %> como una variación de las expresiones sistemáticas <%= %>. Ciertos controles, tales como las listas o las tablas de datos, se ejecutan repetidamente una serie de operaciones (rutina) hasta satisfacer una determinada condición sobre los registros con datos.
El origen de los datos se enlaza a estos componentes mediante su propiedad DataSource y, a continuación, se invoca el método DataBind(). Esto establece el orden de resolución de las expresiones <%# %> que hacen referencia a las columnas del origen de datos:
<asp:Repeater ID="rep1" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"precio") %>
</ItemTemplate>
</asp:Repeater>
El estudio de los controles de datos (acceso a datos con ADO.NET) y de los controles basados en un modelo (Componentes personalizados) detalla esta sintaxis, algo compleja.
Las expresiones ligadas <%$ expression %>
Las expresiones ligadas son útiles a la hora de acceder a las bases de datos. Estas expresiones no se evalúan hasta el momento en que se produce la llamada al método DataBind(). Pueden aparecer errores de contexto que se producen demasiado tarde como para ser corregidos.
Además, las expresiones <%= %> no pueden figurar como valor de atributo, de modo que la siguiente línea sería incorrecta:
<asp:Label ID="lbl" runat="server" Text='<%= 10 %>' />
Para satisfacer ambos requisitos, Microsoft ha dotado a ASP.NET de las $-expressions. Se trata de expresiones de análisis en tiempo de compilación, los cuales limitan el riesgo de errores contextuales y que pueden figurar como valor de un atributo.
Los servidores de aplicaciones ASP.NET y Visual Studio explotan, ambos, las $-expressions. Ciertas expresiones estándar se reconocen directamente en Visual Studio y el desarrollador las aprovecha sin tener que introducir código.
La propiedad (Expressions) es accesible mediante ciertos controles web y reemplaza al anterior sistema de propiedades dinámicas.
El código generado por Visual Studio es una $-expression:
<asp:SqlDataSource ID="SqlDataUsuarios" runat="server"
ConnectionString="<%$ ConnectionStrings:OEConnectionString %>"
SelectCommand="select * from dbo.usuarios"></asp:SqlDataSource>
ASP.NET proporciona, de manera estándar, tres tipos de expresiones:
ConnectionStrings | Lee directamente la sección connectionStrings del archivo Web.config. |
AppSettings | Lee la sección appSettings del archivo Web.config. |
Resources | Lee una entrada de un archivo de recursos. |
De esta forma es como los scriplets permiten insertar código Java en una página JSP (JavaServer Pages). Hay cuatro etiquetas distintas para insertar código Java dentro de una pagina ASP.NET, explicados anteriormente.