Вы находитесь на странице: 1из 9

Sistemas UNI. Instructor: V. Carlos, Segura P.

LABORATORIO Asp.Net – 8.

Derechos Reservados, solo para ser usados dentro de la


institución.
Derechos de Autor

El contenido de este laboratorio tiene todos los derechos reservados, por lo tanto no
se puede reproducir, transcribir, almacenar a un sistema de recuperación o de
alteración, asimismo la traducción a otro idioma de ninguna forma o por ningún
medio mecánico, manual, electrónico, magnético, óptico o de otro modo.

La persecución de una reproducción no autorizada tiene como


consecuencia la cárcel y/o multas.

UNIVERSIDAD NACIONAL DE INGENIERIA 1


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

8 Asp.Net

1 Aplicación, Sesion y Controles Personalizados en Asp.Net.


1.1 Aplicación ASP.NET.

Una aplicación Asp.Net se define como el conjunto de todos los archivos, páginas, controles, módulos,
clases que se pueden invocar o ejecutar dentro del ámbito de un determinado directorio virtual dentro de
un servidor de aplicaciones Web.

Para cada aplicación Web de Asp.Net en un servidor Web se ejecuta dentro de un dominio único lo que
garantiza la ejecución de sus componentes sin en el conflicto con otros espacios de nombres.

Con Asp.Net se mantiene una agrupación de instancias HttpApplication para cada aplicación Web cuando
se realiza una solicitud, la instancia HttpApplication asignada a un proyecto Web es responsable del
proceso de la solicitud a lo largo de todo su período de duración y sólo se puede volver a utilizar después
de que la solicitud se haya completado.

Aplicación Web HttpApplication

Aplicación Web
INTERNET HttpApplication

Aplicación Web HttpApplication

Servidor Web
Al realizar la primera solicitud, se crea una instancia de HttpApplication y se provoca el evento
Application_Start. Al instanciarse HttpApplication se procesan estas solicitudes y al realizarse la
última instancia con la que se termina se provoca el evento Application_End.

Application_End

Aplicación Web HttpApplication


Application_Start
INTERNET

1.2 Y que suceden con los objetos con ámbito de Aplicación?

UNIVERSIDAD NACIONAL DE INGENIERIA 2


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Primero veamos con un ejemplo, para entender que es lo que sucede con objetos de ámbito globales en
una aplicación Web.

1.- Creamos una página con el siguiente diseño:

2.- Dentro de la página debemos crear un DataSet de ámbito público con los espacios de nombre que se
indican:

Imports System.Data
Imports System.Data.SqlClient

Partial Class MemoriData


Inherits System.Web.UI.Page

Dim Ds As New DataSet

Protected Sub Page_Load(ByVal sender . . .

3.- Dentro del evento load de la página escribimos:

If Page.IsPostBack = False Then


Try
Dim str As String = "DATA SOURCE=.;INITIAL " + _
"CATALOG=NORTHWIND;INTEGRATED SECURITY=TRUE"

Dim SQL As String = "SELECT CATEGORYNAME FROM CATEGORIES"


Dim Ad As New SqlDataAdapter(SQL, str)
Ad.Fill(Ds, "Categorias")
Me.lstCategorias.DataSource = Ds.Tables("Categorias")
Me.lstCategorias.DataValueField = "CATEGORYNAME"
Me.lstCategorias.DataBind()
Catch ex As Exception
Response.Write("Error: " + ex.Message)
End Try
End If

4.- Y por ultimo en el botón tenemos:

Me.lstCategorias.Items.Clear()
If Ds.Tables.Count <> 0 Then
Me.lstCategorias.DataSource = Ds.Tables("Categorias")
Me.lstCategorias.DataValueField = "CATEGORYNAME"
Me.lstCategorias.DataBind()
Else
Response.Write("El Dataset no contiene datos")
End If

5.- Y al refrescar la información activando lo que esta en el botón, este produce lo siguiente:

UNIVERSIDAD NACIONAL DE INGENIERIA 3


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Como se vio en un proyecto Web las variables cargadas en un ámbito general no conservan su valor
después de realizar un PostBack, como poder resolver este problema, bueno para eso están las variable
de Sesion o de Aplication que nos ayudan a resolver estos problemas.

Entonces si utilizamos objetos con ámbito global dentro de una aplicación, se debería tener en cuenta que
Asp.Net se procesan las solicitudes de forma concurrente y que nos proporciona el objeto Application
para tener o almacenar valores dentro de nuestra aplicación Web.

Ahora modifiquemos el código anterior como se indica en los siguientes pasos:

1.-Dentro del load de la página, agregamos lo siguiente:

Dim Ad As New SqlDataAdapter(SQL, str)


Ad.Fill(Ds, "Categorias")
Application("MiCategorias") = Ds
Me.lstCategorias.DataSource = Ds.Tables("Categorias")
Me.lstCategorias.DataValueField = "CATEGORYNAME"
. . .
. . . . .

2.- Y en el boton agregamos lo siguiente:

Me.lstCategorias.Items.Clear()
Ds = Application("MiCategorias")
If Ds.Tables.Count <> 0 Then
. . .
. . . . .

1.3 Como controlamos el inicio y fin de una aplicación?

Además de escribir código para interfaces de usuario, los programadores también pueden agregar lógica
del nivel de aplicación y código de control de eventos a sus aplicaciones Web. Este código no se encarga
de generar interfaces de usuario y no se invoca normalmente en respuesta a solicitudes de páginas
individuales. En vez de ello, se encarga de procesar eventos de la aplicación de nivel superior, tales como
Application_Start, Application_End, Session_Start, Session_End, etc. Los programadores crean esta
lógica mediante un archivo Global.asax ubicado en la raíz del árbol de directorios virtuales de una
aplicación Web. ASP.NET analiza y compila automáticamente este archivo para producir una clase
dinámica de .NET Framework, la cual extiende la clase base HttpApplication (la primera vez que se activa
o se solicita cualquier recurso o URL dentro del espacio de nombres de la aplicación).

ASP.NET analiza y compila dinámicamente el archivo Global.asax para producir una clase de .NET
Framework la primera vez que se activa o se solicita cualquier recurso o URL dentro del espacio de
nombres de la aplicación. El archivo Global.asax está configurado para rechazar automáticamente
cualquier solicitud de URL directa de modo que los usuarios externos no puedan descargar o ver el código
interno.

Eventos cuyo ámbito es una sesión o una aplicación

UNIVERSIDAD NACIONAL DE INGENIERIA 4


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Los programadores pueden definir controladores para eventos de la clase base HttpApplication creando
métodos en el archivo Global.asax que se ajusten al modelo de nomenclatura
"NombreDeEventoDeLaAplicación(FirmaDeArgumentosDelEvento)". Por ejemplo:

<script runat="server">
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
Application("Contador") = 0
Application("userCount") = 0
End Sub

Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)


' Code that runs on application shutdown
End Sub

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)


' Code that runs when an unhandled error occurs
End Sub

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)


' Code that runs when a new session is started
Application("userCount") += 1
End Sub

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)


' Code that runs when a session ends.
' Note: The Session_End event is raised only when the sessionstate mode
' is set to InProc in the Web.config file. If session mode is set to StateServer
' or SQLServer, the event is not raised.
End Sub
</script>

1.4 Utilizando Controles de Usuario

Los controles de servidor integrados que proporciona ASP.NET, podemos encontrar desde
autenticación, navegación, con esto nos podemos ahorrar en la configuración, diseño o formato
especificado para los controles que se quieren trabajar.

Los controles personalizados, son desarrollados por el desarrollador, el cual busca una forma de no
utilizar funcionalidades de un objeto repetidas en todo un proyecto, que al cambiar alguno de los
eventos o métodos se tendría que hacer el cambio en todo el proyecto donde se encuentre dicho
objeto.

La estructura de un control personalizado es similar a un Web Forms, podemos crear controles


HTML como controles ASP.Net, la extensión para diferenciar a estos controles es .ascx y su clase
asociada con .ascx.vb, la etiqueta para indicar que se trata de un control personalizado es <%@
Control Language="VB" AutoEventWireup="false". . . Veamos:

El uso de controles personalizados es simplemente desde el explorador de soluciones seleccionar el


control personalizado y arrastrarlo al Web Forms deseado:

UNIVERSIDAD NACIONAL DE INGENIERIA 5


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Veamos un ejemplo:

1.- Agregar un nuevo elemento Web Control Personalizado, con el nombre MiMenu.ascx:

2.- El contenido dentro de este control es el siguiente diseño:

3.- Configurar en el archivo de mapas la siguiente estructura, para las paginas siguientes:

<siteMapNode url="Home.aspx" title="Inicio" description="">


<siteMapNode url="Clientes.aspx" title="Clientes" description="" />
<siteMapNode url="Pedidos.aspx" title="Pedidos" description="" />
<siteMapNode url="Productos.aspx" title="Productos" description="" />
<siteMapNode url="Empleados.aspx" title="Empleados" description="" />
<siteMapNode url="Categorias.aspx" title="Categorias" description="" />
</siteMapNode>

4.- Crear el siguiente Master.pages:

UNIVERSIDAD NACIONAL DE INGENIERIA 6


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Y crear las siguientes páginas que hereden del Master.pages indicado:

Clientes.aspx
Pedidos.aspx
Productos.aspx
Empleados.aspx
Categorias.aspx

5.- Dentro de la página Categorías, crear el siguiente diseño, una tabla con 3 filas y en la ultima
fila arrastrar el control MiMenu.ascx desde el explorador de soluciones y soltarlo en la ultima fila
de la tabla:

6.- Repetir el mismo proceso para las otras páginas.

7.- Probar el programa

Implementemos otro Control:

1.- Crear en el mismo proyecto el siguiente control ctlListados.ascx, con el siguiente diseño:

2.- Dentro del load de este control escribimos lo siguiente:

Public Enum TipoListado


ListClientes = 1
ListPedidos = 2
ListEmpleados = 3
ListCategorias = 4
ListProductos = 5
End Enum
Public Tipo As TipoListado

UNIVERSIDAD NACIONAL DE INGENIERIA 7


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

Protected Sub Page_Load(ByVal sender As Object, ByVal . . .


Response.Write(Tipo.ToString)
Me.SqlData.ConnectionString = ". . . "
Me.SqlData.SelectCommandType = SqlDataSourceCommandType.StoredProcedure
Me.SqlData.SelectCommand = "SS_LISTADOS"
Me.SqlData.SelectParameters.Add("Tipo", Tipo)

Me.SqlData.DataBind()
End Sub

3.- El cual hace un llamado al procedimiento almacenado con el nombre “SS_LISTADOS”

CREATE PROCEDURE DBO.SS_LISTADOS


@TIPO INT
AS
IF @TIPO = 1
SELECT CompanyName, ContactName,
ContactTitle, Address, City
FROM CUSTOMERS WHERE COUNTRY='USA'
IF @TIPO = 2
SELECT OrderID As Orden, ShipName, ShipAddress, ShipCity,
ShipPostalCode, ShipCountry
FROM ORDERS WHERE ShipCountrY='Canada'
IF @TIPO = 3
SELECT LastName, FirstName,
Title
FROM EMPLOYEES
IF @TIPO = 4
SELECT CategoryName, Description
FROM CATEGORIES
IF @TIPO = 5
SELECT ProductName, QuantityPerUnit,
UnitPrice, UnitsInStock,
UnitsOnOrder
FROM PRODUCTS WHERE CategoryID = 3

4.- Una vez, realizado y depurado la aplicación y este control lo arrastramos dentro de la página
Clientes.aspx:

5.- Dentro del load de la página Clientes.aspx, escribimos lo siguiente:

Me.CtlListados1.Tipo = ctlListados.TipoListado.ListClientes

6.- Repetir lo mismo como corresponda para las demás páginas y probar:

UNIVERSIDAD NACIONAL DE INGENIERIA 8


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Sistemas UNI. Instructor: V. Carlos, Segura P.

UNIVERSIDAD NACIONAL DE INGENIERIA 9


FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS

Вам также может понравиться