Documente Academic
Documente Profesional
Documente Cultură
Para crear un sitio web debemos seleccionar desde el entorno del Visual Studio
2015: Archivo ->Nuevo sitio web:
Eventos
Modificaremos ahora nuestra aplicacin para que muestre la fecha del servidor en
una Label. Cuando desde el navegador solicitamos una pgina aspx lo primero que
se ejecuta es el evento Page_Load. Para poder definir un mtodo para dicho evento
hacemos doble clic sobre el WebForm con lo que inmediatamente se abre el archivo
Default.aspx.cs donde tenemos dicho mtodo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
}
}
Luego codificamos dentro del mtodo Page_Load el algoritmo que muestra la fecha
actual del servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Para ver como funciona la clase Button cerraremos nuestro primer sitio web y
procederemos a crearemos otros. Para cerrar el sitio actual desde el men de
opciones elegimos Archivo -> Cerrar Solucin:
Ahora damos los mismos pasos que hicimos para crear el sitio ejercicio001 pero lo
llamamos ejercicio002 (almacenarlo en la carpeta c:\aspnetya\ejercicio002):
Creamos tambin el Web Form Default.aspx:
Los textos "Ingrese primer valor:" e "Ingrese segundo valor:" los escribimos
directamente en cambio el Button, los dos TextBox y la Label las arrastramos desde
el Cuadro de herramientas.
Inicializamos la propiedad Text del objeto de tipo Button con la etiqueta "Sumar".
Luego codificamos el evento click del objeto de la clase Button (en este evento
debemos extraer el contenido de los dos controles de tipo TextBox y proceder a
convertirlos a tipo de dato entero y sumarlos):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Control RadioButton.
Los controles CheckBox permiten que ms de uno sea seleccionado. Similar a los
controles RadioButton tiene dos estados (seleccionado o no seleccionado) y esto lo
sabemos segn el estado de la propiedad Checked.
Codificaremos un nuevo sitio web llamado ejercicio005 que permita cargar dos
valores y luego calcule la suma y/o resta de los valores ingresados. Como podemos
seleccionar ambas operaciones utilizaremos los controles de tipo CheckBox.
La interfaz visual es la siguiente:
La codificacin del evento click del botn es:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
}
protected void Button1_Click(object sender,
EventArgs e)
{
int x1 = int.Parse(TextBox1.Text);
int x2 = int.Parse(TextBox2.Text);
Label1.Text = "";
if (ListBox1.Items[0].Selected)
{
int suma = x1 + x2;
Label1.Text = "La suma es:" + suma +
"<br>";
}
if (ListBox1.Items[1].Selected)
{
int resta = x1 - x2;
Label1.Text += "La diferencia:" + resta
+ "<br>";
}
if (ListBox1.Items[2].Selected)
{
int multi = x1 * x2;
Label1.Text += "El producto:" + multi +
"<br>";
}
if (ListBox1.Items[3].Selected)
{
int divi = x1 / x2;
Label1.Text += "La division:" + divi +
"<br>";
}
}
}
Como podemos ver primero vaciamos el contenido de la Label1 y procedemos
mediante cuatro if a verificar cuales de los elementos del ListBox se encuentran
seleccionados:
if (ListBox1.Items[0].Selected)
Si por ejemplo el primer elemento del ListBox se encuentra seleccionado
procedemos a sumar los dos valores almacenados en los TextBox y los agregamos
a la Label:
int suma = x1 + x2;
Label1.Text = "La suma es:" + suma + "<br>";
En el navegador tenemos como resultado:
Control DropDownList.
El control DropDownList permite crear una lista de valores y luego seleccionar solo
uno de ellos, esta es la diferencia fundamental con el control ListBox.
Para probar el DropDownList implementaremos el problema propuesto con el control
ListBox, ahora la interfaz es la siguiente (crear un sitio web llamado ejercicio007):
Cargamos las cuatro operaciones bsicas en el control DropDownList y para el
evento clic del botn tenemos que codificar:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
}
protected void Button1_Click(object sender,
EventArgs e)
{
int x1 = int.Parse(TextBox1.Text);
int x2 = int.Parse(TextBox2.Text);
Label1.Text = "";
if (DropDownList1.Items[0].Selected)
{
int suma = x1 + x2;
Label1.Text = "La suma es:" + suma +
"<br>";
}
else
if (DropDownList1.Items[1].Selected)
{
int resta = x1 - x2;
Label1.Text = "La diferencia:" +
resta + "<br>";
}
else
if (DropDownList1.Items[2].Selected)
{
int multi = x1 * x2;
Label1.Text = "El producto:" +
multi + "<br>";
}
else
if
(DropDownList1.Items[3].Selected)
{
int divi = x1 / x2;
Label1.Text = "La division:"
+ divi + "<br>";
}
}
}
Como solo un elemento del control DropDowList puede estar seleccionado
disponemos una serie de if/else if para verificar cual de ellos es el seleccionado.
Cuando identificamos el item seleccionado procedemos a efectuar el clculo
correspondiente y mostrarlo en la Label.
En el navegador tenemos como resultado:
Ejercicios propuestos
1 ? Confeccionar una pgina que solicite el ingreso del nombre y apellido de una
persona (cada elemento en un TextBox), luego al presionar un botn mostrar en una
label si alguno de los datos no se carg.
2 ? Confeccionar una pgina que muestre un examen mltiple choice (disponer 4
preguntas y tres respuestas posibles por pregunta) utilizar controles de tipo
RadioButton para la seleccin de la respuesta correcta.
Mostrar la cantidad de respuestas correctas luego que se presiona un botn.
3 ? Disponer un conjunto de RadioButton agrupados. Mostrar en las leyendas de
cada RadioButton distintos buscadores (Google, Bing, Yahoo etc.)
Cuando se presione un botn redireccionar a dicho servidor (para redireccionar
debemos utilizar la siguiente sintaxis
Response.Redirect("http://www.google.com.ar");
4 ? Confeccionar el siguiente formulario para registrarse en un sitio web (utilizar
controles de la pestaa estandar)
En una Label mostrar los datos cargados en cada control (disponer la Label al final
del formulario) Hacer por lo menos 5 validaciones y mostrar mensajes de errores en
una Label.
Clases SQLConnection y SQLCommand (ABM - Altas, Bajas y
Modificaciones)
Conceptos.
Con ASP.Net podemos comunicarnos a distintos gestores de base de datos como pueden
ser SQL Server, Oracle, Access, MySQL etc.
Nosotros trabajaremos con el gestor de base de datos SQL Server por ser el ms
empleado cuando se utiliza la tecnologa de ASP.Net en el desarrollo de sitios web
dinmicos.
En esta clase especificaremos todo el cdigo necesario para acceder al gestor de base de
datos, desde la cadena de conexin hasta la implementacin de los comandos SQL a
enviar.
Si no tiene instalado el SQL Server puede seguir los pasos indicados aqu.
<!--
Para obtener ms informacin sobre cmo configurar la aplicacin de ASP.NET,
visite
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
</system.web>
<connectionStrings>
<add name="cadenaconexion1"
connectionString="Data Source=DIEGO-PC\SQLEXPRESS;Initial
Catalog=base1;Integrated Security=true;"/>
</connectionStrings>
</configuration>
Como vemos en la propiedad connectionString indicamos en Initial Catalog el nombre de la
base de datos que hemos creado en SQL Server 'base1'.
En la propiedad Data Source usted debe fijarse como se llama la instancia de SQL Server
que instal en su mquina, esto puede hacerlo cuando arranca el SQL Server Management
Studio donde dice "Nombre del servidor"
Luego recuperaremos esta cadena de conexin mediante el nombre 'cadenaconexion1'.
Altas
Activemos desde el Visual Studio la pestaa alta.aspx para elaborar la interfaz visual que
nos permita efectuar la carga de datos de usuarios:
Como podemos ver disponemos tres controles de tipo TextBox, el que solicita el ingreso de
la clave modificamos la propiedad TextMode con el valor Password, los otros dos los
dejamos con el valor SingleLine.
Disponemos un objeto de la clase Button y una Label donde mostraremos un mensaje si el
alta se efectu correctamente.
Por ltimo disponemos un objeto de la clase HyperLink configurando la propiedad
NavigateUrl con la direccin de la pgina principal (Default.aspx)
Ahora codificamos el evento clic del botn de alta:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
}
protected void Button1_Click(object sender,
EventArgs e)
{
string s =
System.Configuration.ConfigurationManager.ConnectionStri
ngs["cadenaconexion1"].ConnectionString;
SqlConnection conexion = new SqlConnection(s);
conexion.Open();
SqlCommand comando = new SqlCommand("insert into
usuarios(nombre,clave,mail) values('" +
TextBox1.Text + "','" + this.TextBox2.Text
+ "','" +
TextBox3.Text + "')", conexion);
comando.ExecuteNonQuery();
Label1.Text = "Se registro el usuario";
conexion.Close();
}
}
Lo primero que debemos hacer es importar el espacio de nombres donde se encuentra
definida la clase SqlException:
using System.Data.SqlClient;
Al presionar el botn, primero extraemos la cadena de conexin que tenemos almacenada
en el archivo Web.config:
string s =
System.Configuration.ConfigurationManager.ConnectionStrings["cadenaconexion1"].Co
nnectionString;
Creamos un objeto de la clase SQLConnection indicando como parmetro la cadena de
conexin que rescatamos anteriormente:
SqlConnection conexion = new SqlConnection(s);
Abrimos la conexin:
conexion.Open();
Creamos un objeto de la clase SqlCommand crendolo con los datos cargados en los
controles TextBox:
SqlCommand comando = new SqlCommand("insert into
usuarios(nombre,clave,mail) values('" +
TextBox1.Text + "','" + this.TextBox2.Text + "','" +
TextBox3.Text + "')", conexion);
Pedimos a SQL Server que ejecute el comando especificado anteriormente:
comando.ExecuteNonQuery();
Cerramos la conexin:
conexion.Close();
Consultas
Seleccionamos del Explorador de soluciones la pgina consulta.aspx y procedemos a
elaborar la siguiente interfaz visual (disponemos un TextBox, un Button, una Label y un
HyperLink:
Baja
Modificaciones
}
}
El botn ?Buscar? hace lo mismo que vimos en la consulta. Luego cuando se presiona el
botn ?Modificar? procedemos a hacer un update de la tabla usuarios con los datos
cargados en los TextBox.
Ejercicio propuesto
1 ? Crear una tabla:
alumnos (dni varchar(8), apellidonom varchar(50), provincia varchar(30))
Confeccionar una serie de pginas que permitan efectuar altas, bajas, modificaciones y consultas.
Conceptos.
ABM (Altas, Bajas y Modificaciones)
Veremos otra forma de implementar el acceso a Sql Server utilizando una serie de clases
que nos facilitan codificar los comandos SQL mediante dilogos administrados por el Visual
Studio.
Trabajaremos con la misma base de datos de la clase anterior : base1 y la misma tabla
usuarios:
nombre varchar(30) Clave primaria
clave varchar(30)
mail varchar(30)
Crearemos un sitio web en el Visual Studio llamado ejercicio012.
Crearemos 5 Web Form y les daremos los nombres:
Default.asxp
alta.aspx
consulta.aspx
baja.aspx
modificacion.aspx
La primer pgina solo tendr los hipervnculos a otras pginas que tendrn por objetivo
efectuar una el alta de usuarios, otra la baja, otra las modificaciones y por ltimo otra la
consulta:
Para crear esta interfaz insertaremos cuatro objetos de la clase HyperLink, como mnimo
debemos inicializar las propiedades Text (es el texto que mostrar el hipervnculo en el
navegador y la propiedad NavigateUrl que indica el nombre de la pgina que debe cargar el
navegador cuando se presione el hipervnculo)
Altas
Activemos desde el Visual Studio la pestaa alta.aspx para elaborar la interfaz visual que
nos permita efectuar la carga de datos de usuarios:
Como podemos ver disponemos tres controles de tipo TextBox, el que solicita el ingreso de
la clave modificamos la propiedad TextMode con el valor Password, los otros dos los
dejamos con el valor SingleLine.
Disponemos un objeto de la clase Button y una Label donde mostraremos un mensaje si el
alta se efectu correctamente.
Por ltimo disponemos un objeto de la clase HyperLink configurando la propiedad
NavigateUrl con la direccin de la pgina principal (Default.aspx)
Ahora veremos como crear una conexin con nuestra base de datos que hemos creado
desde SQL Server, seleccionamos desde el men del Visual Studio el "Explorador de
servidores"
Seleccionamos la solapa ?Explorador de servidores? y presionamos botn derecho sobre
"Conexiones a datos", elegimos la opcin ?Agregar conexin?, aparece un ventana de
configuracin:
Y seguidamente seleccionamos el servidor (lo podemos copiar del Sql Server Management
Studio) y la base de datos que trabajaremos:
Debemos seleccionar el nombre del servidor y posteriormente el nombre de la base de
datos.
Podemos presionar luego el botn ?Probar conexin? para comprobar la correcta
configuracin de la conexin.
Presionamos por ltimo el botn ?Aceptar?, veremos luego que aparece en la pestaa del
?Explorador de servidores? la conexin de datos que acabamos de crear. Podemos
presionar sobre el signo ms que aparece en nuestra conexin y ver que tenemos
disponible el acceso a las Tablas, Vistas, Procedimientos almacenados etc. definidos para
la base de datos:
Desde el ?explorador de servidores? se puede ver las tablas, campos de una tabla e
inclusive si presionamos el botn derecho del mouse sobre la tabla usuarios podemos ver
los datos de la misma.
Ahora empezaremos con el alta de usuarios.
Del cuadro de herramientas seleccionamos un control de la clase SqlDataSource (tener en
cuenta que est en el grupo ?Datos? y no en el grupo ?Estndar?)
Ahora vemos que nuestro formulario tiene un componente llamado SqlDataSource1 que es
de la clase SqlDataSource. Este componente visual no se ver en tiempo de ejecucin
como veremos ms adelante.
Seleccionamos el control SqlDataSource1 del formulario y en la ventana de ?Propiedades?
inicializamos la propiedad ConnectionString con el valor que aparece al presionar la
pestaa de la derecha (bsicamente es la cadena de conexin que creamos
anteriormente):
Ahora nos queda configura la propiedad InsertQuery con el comando SQL que nos permite
insertar un registro en una tabla.
La propiedad InsertQuery nos abre una ventana de dilogo donde debemos configurar el
comando INSERT:
Este dilogo es muy importante ingresar correctamente el comando SQL parametrizando
los valores que sern remplazados en tiempo de ejecucin con los datos que cargue el
operador.
Los parmetros se indican con un nombre antecedindole el carcter @.
Luego de crear completamente el comando Insert procedemos a presionar el botn
"Actualizar parmetros".
Si queremos comprobar si nuestro comando SQL est correcto presionamos el botn
"Generador de consultas?" y desde este nuevo dilogo presionamos el botn ?Ejecutar
consulta?:
(Tambin desde este dilogo podemos codificar la consulta, probarla y finalmente
confirmarla)
Lo que no hay que olvidarse nunca es que cada vez que agregamos o borramos un
parmetro de nuestro comando SQL es presionar el botn ?Actualizar parmetros?.
Ahora codificamos el evento clic del botn de alta:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
SqlDataSource1.InsertParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.InsertParameters["clave"].DefaultValue =
TextBox2.Text;
SqlDataSource1.InsertParameters["mail"].DefaultValue =
TextBox3.Text;
SqlDataSource1.Insert();
Label1.Text = "Se efectu la carga";
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
}
}
Al presionar el botn inicializamos los tres parmetros del comando SQL que hemos
configurado en el SqlDataSource. Para acceder a dichos parmetros disponemos de la
propiedad InsertParameters que le indicamos como subndice el nombre del parmetro.
Luego de inicializar los tres parmetros procedemos a llamar al mtodo Insert de la clase
SqlDataSource.
Como vemos es mucho ms limpio que crear directamente aqu el comando SQL como
vimos en el concepto anterior.
Consultas
}
protected void Button1_Click(object sender,
EventArgs e)
{
SqlDataSource1.SelectParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader datos;
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArg
uments.Empty);
if (datos.Read())
Label1.Text = "Clave:" + datos["clave"] +
"<br>Mail:" + datos["mail"];
else
Label1.Text = "No existe un usuario con
dicho nombre";
}
}
Importamos el espacio de nombres SqlClient donde se encuentra la clase SqlDataReader:
using System.Data.SqlClient;
Para poder recuperar los datos mediante un objeto de la clase SqlDataReader debemos
configurar el SqlDataSource indicando a la propiedad DataSourceMode el siguiente valor:
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;
Ahora cuando llamemos al mtodo select del SqlDataSource lo hacemos con la siguiente
sintaxis:
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
Luego recorremos el SqlDataReader (como este caso puede retornar cero o una fila lo
hacemos mediante un if:
if (datos.Read())
Si el mtodo Read retorna true luego podemos acceder a la fila recuperada con el select.
Bajas
}
protected void Button1_Click(object sender,
EventArgs e)
{
SqlDataSource1.DeleteParameters["nombre"].DefaultValue =
TextBox1.Text;
int cant;
cant = SqlDataSource1.Delete();
if (cant == 1)
Label1.Text = "Se borr el usuario";
else
Label1.Text = "No existe dicho nombre";
}
}
Procedemos a inicializar el parmetro y luego llamamos al mtodo Delete del
SqlDataSource. El mtodo Delete retorna un entero y representa la cantidad de filas
borradas de la tabla.
Modificaciones
SqlDataSource1.SelectParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader datos;
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArg
uments.Empty);
if (datos.Read())
{
TextBox2.Text = datos["clave"].ToString();
TextBox3.Text = datos["mail"].ToString();
}
else
Label1.Text = "No existe un usuario con
dicho nombre";
}
SqlDataSource1.UpdateParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.UpdateParameters["clave"].DefaultValue =
TextBox2.Text;
SqlDataSource1.UpdateParameters["mail"].DefaultValue =
TextBox3.Text;
int cant;
cant = SqlDataSource1.Update();
if (cant == 1)
Label2.Text = "Se modificaron los datos";
else
Label2.Text = "No existe dicho codigo de
usuario";
}
}
El mtodo Update de la clase SqlDataSource retorna un entero que indica la cantidad de
registros modificados de la tabla (si retorna un 1 significa que un registro fue modificado):
int cant;
cant = SqlDataSource1.Update();
Conceptos.
ABM (Altas, Bajas y Modificaciones)
Veremos otra forma de implementar el acceso a Sql Server utilizando una serie de clases
que nos facilitan codificar los comandos SQL mediante dilogos administrados por el Visual
Studio.
Trabajaremos con la misma base de datos de la clase anterior : base1 y la misma tabla
usuarios:
nombre varchar(30) Clave primaria
clave varchar(30)
mail varchar(30)
Crearemos un sitio web en el Visual Studio llamado ejercicio012.
Crearemos 5 Web Form y les daremos los nombres:
Default.asxp
alta.aspx
consulta.aspx
baja.aspx
modificacion.aspx
La primer pgina solo tendr los hipervnculos a otras pginas que tendrn por objetivo
efectuar una el alta de usuarios, otra la baja, otra las modificaciones y por ltimo otra la
consulta:
Para crear esta interfaz insertaremos cuatro objetos de la clase HyperLink, como mnimo
debemos inicializar las propiedades Text (es el texto que mostrar el hipervnculo en el
navegador y la propiedad NavigateUrl que indica el nombre de la pgina que debe cargar el
navegador cuando se presione el hipervnculo)
Altas
Activemos desde el Visual Studio la pestaa alta.aspx para elaborar la interfaz visual que
nos permita efectuar la carga de datos de usuarios:
Como podemos ver disponemos tres controles de tipo TextBox, el que solicita el ingreso de
la clave modificamos la propiedad TextMode con el valor Password, los otros dos los
dejamos con el valor SingleLine.
Disponemos un objeto de la clase Button y una Label donde mostraremos un mensaje si el
alta se efectu correctamente.
Por ltimo disponemos un objeto de la clase HyperLink configurando la propiedad
NavigateUrl con la direccin de la pgina principal (Default.aspx)
Ahora veremos como crear una conexin con nuestra base de datos que hemos creado
desde SQL Server, seleccionamos desde el men del Visual Studio el "Explorador de
servidores"
Seleccionamos la solapa ?Explorador de servidores? y presionamos botn derecho sobre
"Conexiones a datos", elegimos la opcin ?Agregar conexin?, aparece un ventana de
configuracin:
Y seguidamente seleccionamos el servidor (lo podemos copiar del Sql Server Management
Studio) y la base de datos que trabajaremos:
Debemos seleccionar el nombre del servidor y posteriormente el nombre de la base de
datos.
Podemos presionar luego el botn ?Probar conexin? para comprobar la correcta
configuracin de la conexin.
Presionamos por ltimo el botn ?Aceptar?, veremos luego que aparece en la pestaa del
?Explorador de servidores? la conexin de datos que acabamos de crear. Podemos
presionar sobre el signo ms que aparece en nuestra conexin y ver que tenemos
disponible el acceso a las Tablas, Vistas, Procedimientos almacenados etc. definidos para
la base de datos:
Desde el ?explorador de servidores? se puede ver las tablas, campos de una tabla e
inclusive si presionamos el botn derecho del mouse sobre la tabla usuarios podemos ver
los datos de la misma.
Ahora empezaremos con el alta de usuarios.
Del cuadro de herramientas seleccionamos un control de la clase SqlDataSource (tener en
cuenta que est en el grupo ?Datos? y no en el grupo ?Estndar?)
Ahora vemos que nuestro formulario tiene un componente llamado SqlDataSource1 que es
de la clase SqlDataSource. Este componente visual no se ver en tiempo de ejecucin
como veremos ms adelante.
Seleccionamos el control SqlDataSource1 del formulario y en la ventana de ?Propiedades?
inicializamos la propiedad ConnectionString con el valor que aparece al presionar la
pestaa de la derecha (bsicamente es la cadena de conexin que creamos
anteriormente):
Ahora nos queda configura la propiedad InsertQuery con el comando SQL que nos permite
insertar un registro en una tabla.
La propiedad InsertQuery nos abre una ventana de dilogo donde debemos configurar el
comando INSERT:
Este dilogo es muy importante ingresar correctamente el comando SQL parametrizando
los valores que sern remplazados en tiempo de ejecucin con los datos que cargue el
operador.
Los parmetros se indican con un nombre antecedindole el carcter @.
Luego de crear completamente el comando Insert procedemos a presionar el botn
"Actualizar parmetros".
Si queremos comprobar si nuestro comando SQL est correcto presionamos el botn
"Generador de consultas?" y desde este nuevo dilogo presionamos el botn ?Ejecutar
consulta?:
(Tambin desde este dilogo podemos codificar la consulta, probarla y finalmente
confirmarla)
Lo que no hay que olvidarse nunca es que cada vez que agregamos o borramos un
parmetro de nuestro comando SQL es presionar el botn ?Actualizar parmetros?.
Ahora codificamos el evento clic del botn de alta:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
SqlDataSource1.InsertParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.InsertParameters["clave"].DefaultValue =
TextBox2.Text;
SqlDataSource1.InsertParameters["mail"].DefaultValue =
TextBox3.Text;
SqlDataSource1.Insert();
Label1.Text = "Se efectu la carga";
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
}
}
Al presionar el botn inicializamos los tres parmetros del comando SQL que hemos
configurado en el SqlDataSource. Para acceder a dichos parmetros disponemos de la
propiedad InsertParameters que le indicamos como subndice el nombre del parmetro.
Luego de inicializar los tres parmetros procedemos a llamar al mtodo Insert de la clase
SqlDataSource.
Como vemos es mucho ms limpio que crear directamente aqu el comando SQL como
vimos en el concepto anterior.
Consultas
}
protected void Button1_Click(object sender,
EventArgs e)
{
SqlDataSource1.SelectParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader datos;
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArg
uments.Empty);
if (datos.Read())
Label1.Text = "Clave:" + datos["clave"] +
"<br>Mail:" + datos["mail"];
else
Label1.Text = "No existe un usuario con
dicho nombre";
}
}
Importamos el espacio de nombres SqlClient donde se encuentra la clase SqlDataReader:
using System.Data.SqlClient;
Para poder recuperar los datos mediante un objeto de la clase SqlDataReader debemos
configurar el SqlDataSource indicando a la propiedad DataSourceMode el siguiente valor:
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;
Ahora cuando llamemos al mtodo select del SqlDataSource lo hacemos con la siguiente
sintaxis:
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
Luego recorremos el SqlDataReader (como este caso puede retornar cero o una fila lo
hacemos mediante un if:
if (datos.Read())
Si el mtodo Read retorna true luego podemos acceder a la fila recuperada con el select.
Bajas
}
protected void Button1_Click(object sender,
EventArgs e)
{
SqlDataSource1.DeleteParameters["nombre"].DefaultValue =
TextBox1.Text;
int cant;
cant = SqlDataSource1.Delete();
if (cant == 1)
Label1.Text = "Se borr el usuario";
else
Label1.Text = "No existe dicho nombre";
}
}
Procedemos a inicializar el parmetro y luego llamamos al mtodo Delete del
SqlDataSource. El mtodo Delete retorna un entero y representa la cantidad de filas
borradas de la tabla.
Modificaciones
SqlDataSource1.SelectParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader datos;
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArg
uments.Empty);
if (datos.Read())
{
TextBox2.Text = datos["clave"].ToString();
TextBox3.Text = datos["mail"].ToString();
}
else
Label1.Text = "No existe un usuario con
dicho nombre";
}
SqlDataSource1.UpdateParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.UpdateParameters["clave"].DefaultValue =
TextBox2.Text;
SqlDataSource1.UpdateParameters["mail"].DefaultValue =
TextBox3.Text;
int cant;
cant = SqlDataSource1.Update();
if (cant == 1)
Label2.Text = "Se modificaron los datos";
else
Label2.Text = "No existe dicho codigo de
usuario";
}
}
El mtodo Update de la clase SqlDataSource retorna un entero que indica la cantidad de
registros modificados de la tabla (si retorna un 1 significa que un registro fue modificado):
int cant;
cant = SqlDataSource1.Update();
Conceptos.
Continuamos con la base de datos que creamos en la clase anterior en SQL Server
llamada: base1 y dentro de la misma crearemos ahora dos nuevas tablas:
Tabla: articulos
codigo int Clave primaria e identidad.
descripcion varchar(50)
precio float
codigorubro int
Tabla: rubros
codigo int Clave primaria e identidad
descripcin varchar(50)
Recordemos que al definir un campo identidad luego el valor lo genera automticamente el
SQL Server y no debemos cargarlo por teclado:
Ahora tenemos creadas las dos tablas con la siguiente estructuras:
Crearemos un sitio web en el Visual Studio llamado ejercicio013.
Crearemos 5 Web Form y les daremos los nombres:
Default.asxp
altarubros.aspx
altaarticulos.aspx
consultaarticulos.aspx
bajaarticulos.aspx
modificacionarticulos.aspx
La primer pgina Default.aspx solo tendr los hipervnculos a otras pginas que tendrn por
objetivo efectuar una el alta de rubros, alta de articulos, otra la baja de articulos, otra las
modificaciones de articulos y por ltimo otra la consulta de articulos.
Para crear esta interfaz insertaremos cinco objetos de la clase HyperLink, como mnimo
debemos inicializar las propiedades Text (es el texto que mostrar el hipervnculo en el
navegador y la propiedad NavigateUrl que indica el nombre de la pgina que debe cargar el
navegador cuando se presione el hipervnculo)
La pgina Default.aspx queda con los siguientes objetos:
Alta de rubros
Alta de articulos
Para efectuar el alta de articulos dispondremos un control de tipo DropDownList el cual nos
permitir seleccionar el rubro que pertenece el articulo que estamos cargando.
Adems disponemos dos objetos de la clase TextBox para ingresar la descripcin y precio
del artculo.
Disponemos un objeto de la clase Button y una Label donde mostraremos un mensaje si el
alta se efectu correctamente.
Por ltimo disponemos un objeto de la clase HyperLink configurando la propiedad
NavigateUrl con la direccin de la pgina principal (Default.aspx)
Hasta este momento la interfaz debe ser igual a:
Del cuadro de herramientas seleccionamos un control de la clase SqlDataSource (tener en
cuenta que est en el grupo ?Datos? y no en el grupo ?Estndar?)
Ahora podemos ver que nuestro formulario tiene un componente llamado SqlDataSource1
que es de la clase SqlDataSource.
Ahora modificaremos el nombre de este objeto (SqlDataSource1) por
SqlDataSourceRubros.
Este primer SqlDataSource nos permitir rescatar los datos de los rubros (codigo y
descripcin) y poblar el control DropDownList.
Seleccionamos el control SqlDataSourceRubros del formulario y en la ventana de
?Propiedades? inicializamos la propiedad ConnectionString con el valor creado en el
concepto anterior (bsicamente es la cadena de conexin que creamos anteriormente)
Ahora nos queda configura la propiedad SelectQuery con el comando SQL que nos permite
recuperar todas las filas de la tabla rubros.
La propiedad SelectQuery nos abre una ventana de dilogo donde debemos configurar el
comando SELECT:
select codigo,descripcion from rubros
Ahora seleccionamos el DropDownList1 y en el men que aparece en el mismo objeto
seleccionamos "Elegir origen de datos..."
En este dilogo seleccionamos el SqlDataSourceRubros y presionamos "Actualizar
esquema":
Seguidamente elegimos el campo a mostrar y el valor a retornar del DropDownList:
Ahora agregamos un segundo SqlDataSource y procedemos a darle como nombre
SqlDataSourceArticulos y configurar su ConnectionString:
Configuramos la propiedad InsertQuery para implementar el alta de articulo:
Ahora ya hemos dado todos los pasos para configurar el alto de artculos, debemos
implementar el evento clic del botn de alta:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
SqlDataSourceArticulos.InsertParameters["descripcion"].D
efaultValue = TextBox1.Text;
SqlDataSourceArticulos.InsertParameters["precio"].Defaul
tValue = TextBox2.Text;
SqlDataSourceArticulos.InsertParameters["codigorubro"].D
efaultValue = DropDownList1.SelectedValue;
SqlDataSourceArticulos.Insert();
Label1.Text = "se efectu la carga";
TextBox1.Text = "";
TextBox2.Text = "";
}
}
Si ejecutamos la aplicacin ya podemos cargar artculos y ver que nuestro DropDownList
muestra todos los rubros:
Consultas de articulos
SqlDataSource1.SelectParameters["codigo"].DefaultValue =
TextBox1.Text;
SqlDataSource1.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader registros;
registros =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArg
uments.Empty);
if (registros.Read())
Label1.Text = "Descripcion:" +
registros["descriarticulo"] + "<br>" +
"Precio:" + registros["precio"] + "<br>"
+
"Rubro:" + registros["descrirubro"];
else
Label1.Text = "No existe un artculo con
dicho cdigo";
}
}
Para poder recuperar los datos mediante un objeto de la clase SqlDataReader debemos
configurar el SqlDataSource indicando a la propiedad DataSourceMode el siguiente valor:
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;
Ahora cuando llamemos al mtodo select del SqlDataSource lo hacemos con la siguiente
sintaxis:
SqlDataReader registros;
registros =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
Luego recorremos el SqlDataReader (como este caso puede retornar cero o una fila lo
hacemos mediante un if):
if (registros.Read())
Si el mtodo Read retorna true luego podemos acceder a la fila recuperada con el select:
Label1.Text = "Descripcion:" +
registros["descriarticulo"] + "<br>" +
"Precio:" + registros["precio"] + "<br>" +
"Rubro:" + registros["descrirubro"];
Bajas de artculos
Modificaciones de artculos.
SqlDataSourceArticulos.SelectParameters["codigo"].Defaul
tValue = TextBox1.Text;
SqlDataSourceArticulos.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader registros;
registros =
(SqlDataReader)SqlDataSourceArticulos.Select(DataSourceS
electArguments.Empty);
if (registros.Read())
{
TextBox2.Text =
registros["descripcion"].ToString();
TextBox3.Text =
registros["precio"].ToString();
DropDownList1.SelectedValue =
registros["codigorubro"].ToString();
DropDownList1.DataSource =
SqlDataSourceRubros;
DropDownList1.DataTextField = "descripcion";
DropDownList1.DataValueField = "codigo";
DropDownList1.DataBind();
}
else
Label1.Text = "No existe un artculo con
dicho cdigo";
}
SqlDataSourceArticulos.UpdateParameters["descripcion"].D
efaultValue = TextBox2.Text;
SqlDataSourceArticulos.UpdateParameters["precio"].Defaul
tValue = TextBox3.Text;
SqlDataSourceArticulos.UpdateParameters["codigorubro"].D
efaultValue = DropDownList1.SelectedValue;
SqlDataSourceArticulos.UpdateParameters["codigo"].Defaul
tValue = TextBox1.Text;
int cant;
cant = SqlDataSourceArticulos.Update();
if (cant == 1)
Label2.Text = "Se modifico el artculo";
else
Label2.Text = "No existe el codigo";
}
}
Control GridView
Conceptos.
El control GridView del ASP.Net permite visualizar datos en una tabla en pantalla, editar,
modificar y borrar registros del mismo.
El GridView es un control extremadamente flexible para mostrar tablas multicolumna.
Cada registro de una consulta del un select configurado en un SqlDataSource genera una
fila en la grilla. Cada campo en el registro representa una columna en la grilla.
El GridView es el control ms poderoso que provee el ASP.Net. Veremos que este control
trae funcionalidades ya implementadas para paginacin, ordenamiento y edicin de sus
datos.
Crearemos un proyecto llamado para probar el control GridView y las diferentes opciones
que nos brinda.
Crear un sitio web en el Visual Studio llamado ejercicio014.
Agregar un Web Form llamado Default.aspx. Iremos al Explorador de servidores y
seleccionaremos la tabla ?rubros? y la arrastraremos al formulario web. Veremos que se
generan dos objetos sobre la pgina:
Un objeto de la clase GridView llamado GridView1.
Un objeto de la clase SqlDataSource llamado SqlDataSource1.
Si seleccionamos el objeto SqlDataSource1 y observamos el contenido de la propiedad
SelectQuery, veremos que ya est configurado el comando SELECT:
SELECT [codigo], [descripcion] FROM [rubros]
Como podemos ver ya est configurado el origen de datos con el objeto SqlDataSource1.
Habilitemos la paginacin, ordenamiento, edicin y eliminacin.
Ejecutemos el proyecto y comprobaremos que tenemos en la pgina los datos de la tabla
?rubros? con la capacidad de modificar y borrar registros. Adems est activa la paginacin
y ordenamiento por cualquiera de las dos columnas de la tabla (cambiemos la propiedad
PageSize del objeto GridView por el valor 3)
Sin escribir una sola lnea de cdigo tenemos el mantenimiento de la tabla rubros (con la
excepcin del alta)
Veamos otras caractersticas que podemos configurar en forma visual del control GridView.
Desde el botn ?>? que se encuentra en la parte superior derecha del control GridView1
podemos seleccionar la opcin ?Formato Automtico...? para definir la presentacin de la
tabla con plantillas predefinidas de color y fuente:
Luego de seleccionar el esquema para el GridView, presionamos aceptar y tenemos ya
definido el nuevo formato de la grilla.
Desde la ventana de propiedades configuraremos las propiedades:
Caption: Es un ttulo que aparece en la parte superior del GridView.
PageSize: Cantidad de registros a mostrar por pgina.
Luego de esto ejecutamos nuevamente y tenemos como resultado:
Datos de varias tablas
Tabla: rubros
codigo int Clave primaria e identidad
descripcion varchar(50
Crearemos un nuevo Sitio Web llamado "ejercicio015" y agregaremos un webform llamado
Default.aspx. Seleccionamos desde el Explorador de servidores la tabla articulos y la
disponemos dentro del webform. El entorno del Visual Studio .Net nos genera un objeto de
la clase GridView y otro de la clase SqlDataSource.
El objetivo final es mostrar el cdigo del artculo, su descripcin, su precio y finalmente la
descripcin del rubro (no el cdigo de rubro)
1 - Primero seleccionamos el control SqlDataSource1 y configuramos la propiedad
SelectQuery con el comando Select que rescata los datos haciendo el emparejamiento por
la columna codigorubro de la tabla articulos y codigo de la tabla rubros:
SELECT ar.codigo,
ar.descripcion as descriarticulo,
precio,
ru.descripcion as descrirubro
from articulos as ar
join rubros as ru on ru.codigo=ar.codigorubro
2 - Luego de configurar la propiedad SelectQuery debemos actualizar el esquema del
SqlDataSource1, esto lo hacemos seleccionando el objeto sobre el formulario y
seleccionamos la opcin ?Actualizar esquema?.
Con esto logramos que se refresque las columnas a mostrar en el GridView1.
Si ejecutamos podemos ver que ya tenemos la tabla que rescata todos los artculos y asociado a
cada artculo la descripcin del rubro al que pertenece:
Cambiemos los ttulos de las columnas de cada campo (por ejemplo en el campo
descriarticulo mostraremos el ttulo ?Descripcin del Art.? Modificando la propiedad
HeaderText.
De forma similar cambiar los otros ttulos de las columnas de la grilla:
C ? La propiedad Visible de cada columna nos permite configurar si la columna se muestra
o no.
D ? La propiedad DataFormatString nos permite configurar la apariencia de nmeros y
fechas. Por ejemplo si queremos que el precio aparezca con el smbolo de moneda
debemos configurar la propiedad DataFormatString con el valor:
{0:C}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
}
}
}
Con el if verificamos si el evento se dispar para una fila de datos de la grilla (ya que este
mtodo se dispara cuando dibuja la cabecera (DataControlRowType.Header), el pi de
grilla (DataControlRowType.Footer) etc.
Luego rescatamos el valor del campo precio y verificamos con un nuevo if si el precio
supera 8, en caso afirmativo modificamos el color de fondo (BackColor) y de frente de la
fila.
Seleccin de una fila del GridView y posterior extraccin de sus datos.
En muchas situaciones es necesario que el usuario seleccione una fila de la grilla para
reflejar dicho dato en otra parte de la pgina o hacer otra consulta.
Para poder implementar esta caracterstica del GridView llevaremos a cabo los siguientes
pasos:
1 ? Cambiaremos el valor de la propiedad SelectedRowStyle.BackColor por amarillo (es
decir que cuando seleccionemos la fila el color de fondo de la misma se activar con este
valor)
2 ? En el men de opciones que se despliega en la parte derecha del GridView1
activaremos el CheckBox ?Habilitar seleccin?
3 ? Dispondremos una Label en el webform para mostrar el valor seleccionado de la grilla
(solo a modo de ejemplo)
4 ? Para el evento SelectedIndexChanged del GridView1 codificaremos el siguiente cdigo:
protected void GridView1_SelectedIndexChanged(object
sender, EventArgs e)
{
Label1.Text =
this.GridView1.Rows[GridView1.SelectedIndex].Cells[1].Te
xt;
}
El objeto Rows del GridView almacena una coleccin de filas, mediante el valor devuelto
por la propiedad SelectedIndex de la grilla podemos acceder a la celda que almacena el
cdigo del artculo.
Esta informacin nos es muy til para mostrar informacin adicional sobre el registro en
otro control por ejemplo.
Control GridView
Conceptos.
El control GridView del ASP.Net permite visualizar datos en una tabla en pantalla, editar,
modificar y borrar registros del mismo.
El GridView es un control extremadamente flexible para mostrar tablas multicolumna.
Cada registro de una consulta del un select configurado en un SqlDataSource genera una
fila en la grilla. Cada campo en el registro representa una columna en la grilla.
El GridView es el control ms poderoso que provee el ASP.Net. Veremos que este control
trae funcionalidades ya implementadas para paginacin, ordenamiento y edicin de sus
datos.
Crearemos un proyecto llamado para probar el control GridView y las diferentes opciones
que nos brinda.
Crear un sitio web en el Visual Studio llamado ejercicio014.
Agregar un Web Form llamado Default.aspx. Iremos al Explorador de servidores y
seleccionaremos la tabla ?rubros? y la arrastraremos al formulario web. Veremos que se
generan dos objetos sobre la pgina:
Un objeto de la clase GridView llamado GridView1.
Un objeto de la clase SqlDataSource llamado SqlDataSource1.
Si seleccionamos el objeto SqlDataSource1 y observamos el contenido de la propiedad
SelectQuery, veremos que ya est configurado el comando SELECT:
SELECT [codigo], [descripcion] FROM [rubros]
El comando SELECT indica rescatar todas las filas de la tabla rubros.
Podemos ver tambin que se han configurado automticamente las propiedades
InsertQuery, DeleteQuery y UpdateQuery con los valores:
INSERT INTO [rubros] ([descripcion]) VALUES (@descripcion)
Tabla: rubros
codigo int Clave primaria e identidad
descripcion varchar(50
Crearemos un nuevo Sitio Web llamado "ejercicio015" y agregaremos un webform llamado
Default.aspx. Seleccionamos desde el Explorador de servidores la tabla articulos y la
disponemos dentro del webform. El entorno del Visual Studio .Net nos genera un objeto de
la clase GridView y otro de la clase SqlDataSource.
El objetivo final es mostrar el cdigo del artculo, su descripcin, su precio y finalmente la
descripcin del rubro (no el cdigo de rubro)
1 - Primero seleccionamos el control SqlDataSource1 y configuramos la propiedad
SelectQuery con el comando Select que rescata los datos haciendo el emparejamiento por
la columna codigorubro de la tabla articulos y codigo de la tabla rubros:
SELECT ar.codigo,
ar.descripcion as descriarticulo,
precio,
ru.descripcion as descrirubro
from articulos as ar
join rubros as ru on ru.codigo=ar.codigorubro
2 - Luego de configurar la propiedad SelectQuery debemos actualizar el esquema del
SqlDataSource1, esto lo hacemos seleccionando el objeto sobre el formulario y
seleccionamos la opcin ?Actualizar esquema?.
Con esto logramos que se refresque las columnas a mostrar en el GridView1.
Si ejecutamos podemos ver que ya tenemos la tabla que rescata todos los artculos y asociado a
cada artculo la descripcin del rubro al que pertenece:
Cambiemos los ttulos de las columnas de cada campo (por ejemplo en el campo
descriarticulo mostraremos el ttulo ?Descripcin del Art.? Modificando la propiedad
HeaderText.
De forma similar cambiar los otros ttulos de las columnas de la grilla:
C ? La propiedad Visible de cada columna nos permite configurar si la columna se muestra
o no.
D ? La propiedad DataFormatString nos permite configurar la apariencia de nmeros y
fechas. Por ejemplo si queremos que el precio aparezca con el smbolo de moneda
debemos configurar la propiedad DataFormatString con el valor:
{0:C}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
}
}
}
Con el if verificamos si el evento se dispar para una fila de datos de la grilla (ya que este
mtodo se dispara cuando dibuja la cabecera (DataControlRowType.Header), el pi de
grilla (DataControlRowType.Footer) etc.
Luego rescatamos el valor del campo precio y verificamos con un nuevo if si el precio
supera 8, en caso afirmativo modificamos el color de fondo (BackColor) y de frente de la
fila.
Seleccin de una fila del GridView y posterior extraccin de sus datos.
En muchas situaciones es necesario que el usuario seleccione una fila de la grilla para
reflejar dicho dato en otra parte de la pgina o hacer otra consulta.
Para poder implementar esta caracterstica del GridView llevaremos a cabo los siguientes
pasos:
1 ? Cambiaremos el valor de la propiedad SelectedRowStyle.BackColor por amarillo (es
decir que cuando seleccionemos la fila el color de fondo de la misma se activar con este
valor)
2 ? En el men de opciones que se despliega en la parte derecha del GridView1
activaremos el CheckBox ?Habilitar seleccin?
3 ? Dispondremos una Label en el webform para mostrar el valor seleccionado de la grilla
(solo a modo de ejemplo)
4 ? Para el evento SelectedIndexChanged del GridView1 codificaremos el siguiente cdigo:
protected void GridView1_SelectedIndexChanged(object
sender, EventArgs e)
{
Label1.Text =
this.GridView1.Rows[GridView1.SelectedIndex].Cells[1].Te
xt;
}
El objeto Rows del GridView almacena una coleccin de filas, mediante el valor devuelto
por la propiedad SelectedIndex de la grilla podemos acceder a la celda que almacena el
cdigo del artculo.
Esta informacin nos es muy til para mostrar informacin adicional sobre el registro en
otro control por ejemplo.
Controles de validacin
Conceptos.
Introduccin
Hay seis controles Web para la validacin de datos de entrada que se pueden incorporar
en un Formulario Web.
RequiredFieldValidator: Facilita la validacin de un dato del formulario chequeando que el
mismo tenga algn valor.
RangeValidator: Facilita la validacin de un dato del formulario contra un valor mnimo y
mximo.
CompareValidator: Facilita la validacin de un dato del formulario contra un valor fijo u otro
campo del formulario.
CustomValidator: Facilita la validacin de un dato del formulario usando una subrutina
propia.
RegularExpressionValidator: Facilita la validacin de un dato del formulario contra una
expresin.
ValidationSumary: Agrupa los mensajes de error de otros controles en una parte de la
pgina.
Todos los controles de validacin tienen tres propiedades fundamentales:
ControlToValidate, Text e IsValid. Todos los controles derivan de la clase BaseValidator.
La propiedad ControlToValidate contiene la referencia del control del formulario que
queremos validar.
La propiedad Text almacena el mensaje de error que queremos que se muestre en la
pgina.
Por ltimo la propiedad IsValid almacena True en caso que el control pase el test de
validacin.
Cuando empleamos controles de validacin automticamente se usan funciones en
JavaScript en el cliente. Esto significa que los controles pueden inmediatamente mostrar
los mensajes de error en el browser mientras el usuario est completando el formulario. Si
hay algn error en la pgina el cdigo JavaScript previene que el usuario pueda enviar los
datos al servidor.
En caso de emplear navegadores ms antiguos los controles que veremos seguirn
funcionando, pero la validacin se realizar en el servidor.
Sitio Web
<!--
Para obtener ms informacin sobre cmo configurar la
aplicacin de ASP.NET, visite
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2"
/>
<httpRuntime targetFramework="4.5.2" />
</system.web>
<appSettings>
<add
key="ValidationSettings:UnobtrusiveValidationMode"
value="None" />
</appSettings>
</configuration>
Para probar este control haremos una pgina que solicite el nombre de usuario
(mostraremos un error si el operador no ingresa texto en el TextBox)
La interface visual es la siguiente:
Control: RangeValidator
siguiente:
Control: CompareValidator
Control: CustomValidator
protected void
CustomValidator1_ServerValidate(object source,
ServerValidateEventArgs args)
{
int valor;
valor = int.Parse(TextBox1.Text);
if (valor % 5 == 0)
args.IsValid = true;
else
args.IsValid = false;
}
}
El parmetro args tiene una propiedad fundamental llamada IsValid que debemos asignarle
el resultado de nuestra validacin. En nuestro ejemplo almacenamos el nmero ingresado
en la variable valor, luego mediante el operador % (resto de una divisin) verificamos si es
cero, en caso afirmativo inicializamos la propiedad IsValid del objeto args con el valor true,
en caso contrario, es decir que el nmero ingresado no sea un mltiplo de 5 almacenamos
el valor false.
Cuando se presiona el botn confirmar tenemos:
protected void Button1_Click(object sender,
EventArgs e)
{
if (IsValid)
{
Response.Redirect("Default5.aspx");
}
}
Control: RegularExpressionValidator
Control: ValidationSummary
Cuando tenemos formularios con gran cantidad de controles puede llegar a ser dificultoso
ubicar los errores en la pgina. El Framework de .Net trae otra clase llamada
ValidationSummary que muestra todos los errores de la pgina agrupados en una parte de
pantalla. Para utilizar el control ValidationSummary es necesario fijar el valor de la
propiedad ErrorMessage para cada control de validacin que tiene la pgina. Es importante
no confundir la propiedad Text que aparece en la misma posicin donde la disponemos con
la propiedad ErrorMesage que contiene el mensaje de error que mostrar el control
ValidationSummary.
Para probar este control haremos una pgina que solicite la carga del nombre de usuario y
su clave en forma obligatoria (mostrando un mensaje de error en caso de dejar vaco los
TextBox)
La interfaz de la pgina es la siguiente:
Debemos disponer los siguientes objetos sobre el formulario:
1 Button, 2 TextBox, 2 RequiredFieldValidator y un objeto de la clase ValidationSummary.
La propiedad text de los objetos RequiredFieldValidator las inicializamos con un (*)
asterisco y las propiedades ErrorMessage con las cadenas: ?Debe ingresar el nombre de
usuario? y ?Debe ingresar la clave? respectivamente. En cuanto al objeto de la clase
ValidationSummary no debemos hacer ninguna configuracin especifica, solo ubicarlo
dentro de la pgina.
Para el evento clic del botn codificamos:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Conceptos.
Una actividad muy comn en un sitio web es el envo de archivos desde el cliente y su
almacenamiento el el servidor.
Upload
Componente FileUpload
Es una buena costumbre evitar almacenar los archivos que suben los usuarios en la misma
carpeta donde se encuentran la pginas dinmicas ASPX.
Para almacenar los archivos en otro directorio primero debemos crear el directorio (por
ejemplo creemos una carpeta llamada 'imagenes' en el directorio donde se aloja el sitio,
presionamos el botn izquierdo dentro del "Explorador de soluciones" y seleccionamos
Agregar -> Nueva carpeta)
Creamos un nuevo webform (Default2.aspx), definimos una interfaz visual idntica al primer
formulario y escribimos el siguiente cdigo para el evento clic del objeto Button:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
El tamao del archivo nos puede ser til si queremos limitar el peso del mismo.
Puede suceder que en la carpeta donde se almacena el archivo exista otro con el mismo
nombre. Esto conlleva a que se pise el archivo antiguo por el nuevo.
Veamos otro webform donde validamos que no exista otro archivo con el mismo nombre,
en caso afirmativo no permitimos su almacenamiento e informamos de tal situacin:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
No olvidar de definir el campo codigo de la tabla marcas de tipo identidad para que se
genere automticamente.
Desde el Visual Studio .Net proceder a crear un sitio web vaco (ejercicio018) y agregar el
primer Web Form que contendr el men de opciones para efectuar:
a ? Confeccionar el mantenimiento de la tabla marcas (altas, bajas y
modificaciones (utilizar un GridView)
b ? Confeccionar una pgina para efectuar el alta de autos.
c ? Consulta de un auto ingresando su patente (mostrar todos los datos, incluido
la foto)
d ? Seleccionar de un DropDownList una marca y luego mostrar todas las fotos de
autos de dicha marca.
e ? Implementar el borrado de un auto ingresando su patente.
f ? Ingresar un rango de aos y luego mostrar todas las fotos de autos en dicho
rango.
La pgina Default.aspx tiene 6 HyperLink:
Punto a
dsmarcas.InsertParameters["descripcion"].DefaultValue =
TextBox1.Text;
dsmarcas.Insert();
TextBox1.Text = "";
}
}
Luego la interfaz en tiempo de ejecucin debe quedar:
Punto b
Confeccionar una pgina para efectuar el alta de autos donde implementaremos el upload
de la foto. Debemos crear una interfaz visual similar a esta (llamar al Web Form
altaautos.aspx):
Configuramos el SqlDataSource de marcas : dsmarcas
asocindolo con la tabla marcas, luego el DropDownList1 lo vinculamos a este DataSource
para que muestre todas las marcas.
El SelectQuery del objeto dsmarcas:
Por otro lado creamos el dsautos y configuramos el InsertQuery:
Para el evento click del alta procedemos a inicializar los parmetros y a efectuar el insert en
la tabla autos.
Adems hacemos el upload del archivo de la foto con el objetivo de que la foto quede
almacenada en forma permanente en el servidor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
dsautos.InsertParameters["propietario"].DefaultValue =
TextBox2.Text;
dsautos.InsertParameters["precio"].DefaultValue
= TextBox3.Text;
dsautos.InsertParameters["modelo"].DefaultValue
= TextBox4.Text;
dsautos.InsertParameters["codigomarca"].DefaultValue =
DropDownList1.SelectedValue;
dsautos.InsertParameters["foto"].DefaultValue =
FileUpload1.FileName;
dsautos.Insert();
Label1.Text = "Los datos fueron cargados";
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
TextBox4.Text = "";
}
}
Punto c
Consulta de un auto ingresando su patente (mostrar todos los datos, incluido la foto)
Creamos un nuevo Web Form llamado: 'consultaporpatente.aspx' e implementamos una
interfaz que nos permita ingresar la patente de un auto y nos muestre mediante una Label y
un objeto de la clase Image los datos de dicho vehculo:
Debemos configuramos la propiedad SelectQuery del dsautos con el siguiente comando
SQL para recuperar los datos:
Recordar que cada vez que creamos un parmetro en el comando SQL debemos presionar
el botn "Actualizar parmetros".
El cdigo del evento click de "Consultar" queda definido por:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Seleccionar de un DropDownList una marca y luego mostrar todas las fotos de autos de
dicha marca.
Creamos un Web Form llamado fotospormarca.aspx y desarrollamos una interfaz similar a
la siguiente:
Configuramos el SelectQuery del dsmarcas con la consulta de la tabla marcas:
select codigo, descripcion from marcas
Por otro lado configuramos el origen de datos del DropDownList1 para que se muestren
todas las marcas y podamos posteriormente recuperar el cdigo de la marca seleccionada.
Tambin iniciamos la propiedad SelectQuery del objeto dsautos:
select foto from autos where codigomarca=@codigomarca
Luego cuando se presiona el botn "Mostrar" debemos recuperar todas las fotos de autos
que pertenecen a la marca seleccionada:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
dsautos.SelectParameters["patente"].DefaultValue =
TextBox1.Text;
dsautos.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader registro;
registro =
(SqlDataReader)dsautos.Select(DataSourceSelectArguments.
Empty);
if (registro.Read())
File.Delete(Server.MapPath(".") + "/" +
registro["foto"]);
}
}
}
Punto f
Ingresar un rango de aos y luego mostrar todas las fotos de autos en dicho rango.
Creamos un Web Form llamado "consultarango.aspx" con una interfaz similar a:
Configuramos la propiedad SelectQuery del SqlDataSource con el comando SQL:
select foto from autos where modelo>=@modelo1 and modelo<=@modelo2
Para el evento click del botn procedemos a mostrar todas las fotos de autos cuyos
modelos se encuentran comprendidos entre los dos valores ingresados:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
dsautos.SelectParameters["modelo1"].DefaultValue
= TextBox1.Text;
dsautos.SelectParameters["modelo2"].DefaultValue
= TextBox2.Text;
dsautos.DataSourceMode =
SqlDataSourceMode.DataReader;
SqlDataReader registros =
(SqlDataReader)dsautos.Select(DataSourceSelectArguments.
Empty);
Label1.Text = "";
while (registros.Read() == true)
{
Label1.Text = Label1.Text + "<img src=\"" +
registros["foto"] +
"\"><br><br>";
}
}
}
Ejercicio propuesto
1 ? Se tienen las siguientes tablas:
libros (codigo, titulo, descripcion, fototapa, codigotema)
temas (codigo, descripcion)
a ? Confeccionar el alta de las tablas libros y temas (permitir seleccionar el tema mediante
una lista) Hacer el Upload de la imagen al servidor. Validar que se ingresen
obligatoriamente el titulo, descripcin y seleccin de un archivo.
b ? Ingresar por teclado el cdigo de un libro y luego mostrar la foto de la tapa.
Cookies y Session.
Conceptos.
Introduccin.
Cuando un sitio web necesita identificar un usuario que visita un conjunto de pginas web
puede emplear cookies y variables de sesin.
Como veremos las cookies se almacenan en el cliente (navegador) y son enviadas al
servidor cada vez que le solicitamos una pgina a dicho servidor. En cambio las variables
de sesin se almacenan en el servidor.
Cookies
El protocolo http es un protocolo desconectado. El protocolo http por si mismo no provee al
servidor Web si dos peticiones provienen del mismo navegador. Desde este punto de vista,
para el Servidor Web cada peticin de pgina proviene de un nuevo usuario. Esta
caracterstica puede ser un inconveniente para ciertos sitios Web.
Netscape introdujo las cookies en su primera versin de navegador. Desde entonces, el
Wold Wide Web Consortium (W3C) ha sumado las cookies al estandar. Muchos
navegadores ahora pueden utilizar las cookies.
Las Cookies son pequeas piezas de informacin que el servidor solicita que el navegador
las registre en el equipo del cliente. De acuerdo a la especificacin original de Netscape
una cookie no puede contener ms de 4 Kb (el tamao se refiere a la combinacin del
nombre y valor de la cookie)
Una cookie persistente tiene una fecha de caducidad de la misma. Cuidado: No podemos
garantizar que la cookie existir por el tiempo que hemos fijado al crearla, ya que el
navegador puede en cualquier momento borrarla o inclusive el usuario del equipo cliente
puede manualmente borrar las cookies.
Crear un sitio web ejercicio019.
Haremos dos pginas, en una cargaremos el valor de la cookie y en la segunda la
imprimiremos.
La interfaz y cdigo de la primer pgina es:
Para el evento Clic del botn "Crear cookie" escribimos el siguiente cdigo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Luego codificamos para el evento clic del botn y para el evento Page_Load:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Variables de Sesin
Una variable de sesin permite preservar el valor de una variable a travs de una serie de
pginas. Una variable de sesin se utiliza normalmente para almacenar una preferencia del
usuario, un carrito de compras, informacin de seguridad del usuario, nombres de usuarios,
password, etc.
Las variables de sesin son almacenadas durante el tiempo que el usuario visita el sitio
Web.
Cuando el servidor detecta que el usuario no hace ms peticiones de pginas, la
informacin almacenada en las variables de sesin es automticamente destruida (por
defecto est configurado para que la destruccin de dichas variables suceda luego de 20
minutos de inactividad)
Podemos modificar el tiempo de vida de las variables de sesin inicializando la propiedad
Timeout del objeto Session que tiene toda pgina (el valor que se asigna representa
minutos)
Session.Timeout = 10;
Los datos que podemos almacenar en variables de sesin pueden ser de cualquier tipo:
string, int, ArrayList, etc.
Para ilustrar el uso de variables de sesin haremos una serie de pginas donde en la
primera ingresaremos el nombre de usuario y clave, en la segunda los listaremos, y en esta
dispondremos un hipervnculo para dirigirnos a una tercera pgina, donde mostraremos
nuevamente el contenido de las variables de sesin.
Crear las pginas Default5.aspx y Default6.aspx.
(Default4.aspx):
Esta pgina solicita la carga de los dos datos y redirecciona a la segunda pgina, la interfaz
visual es la siguiente:
El cdigo para el evento Click del botn confirmar es el siguiente:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Conceptos.
Introduccin
Cuando debemos generar imgenes a partir de datos que se extraen de una base de datos
o datos ingresados desde el navegador debemos construir la imagen en dicho momento.
ASP.Net provee de clases orientadas a generar imgenes en memoria y su posterior
materializacin en un archivo.
Imgenes dinmicas
1 - Programa ?Hola Mundo?
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
b ? El archivo holamundo.aspx.cs es:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//Importamos el espacio de nombre que declara la clase
Bitmap, Graphics, Font y SolidBrush
using System.Drawing;
//Importamos el espacio de nombre que declara la clase
ImageFormat
using System.Drawing.Imaging;
public partial class holamundo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Creamos un objeto de la clase Bitmap
Bitmap mapabit = new Bitmap(500, 300);
Graphics lienzo;
//Iicializamos la variable de tipo Graphics con
el bitmap creado
lienzo = Graphics.FromImage(mapabit);
//Creamos una fuente
Font fuente1 = new Font("Arial", 40);
//Creamos un pincel
SolidBrush pincel1 = new SolidBrush(Color.Red);
//Graficamos dentro de la imagen
lienzo.DrawString("Hola Mundo", fuente1,
pincel1, 10, 10);
//Enviamos la imagen al navegador que la
solicit
mapabit.Save(Response.OutputStream,
ImageFormat.Gif);
}
}
El resultado de la ejecucin es:
Es importante tener en cuenta que cuando ejecutamos este webform en realidad lo que
retorna es una imagen con formato gif y no un archivo HTML. Fcilmente podemos
comprobarlo tratando de ver el cdigo fuente de la pgina presionando el botn derecho del
mouse dentro del navegador.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<img src="holamundo.aspx" alt="prueba de imagen dinmica" />
</div>
</form>
</body>
</html>
Es decir que con el elemento HTML img indicamos en la propiedad src el nombre del
archivo que genera la imagen.
3 ?Generacin de un Captcha.
Captcha es el acrnimo de Completely Automated Public Turing text to tell Computers and
Humans Apart (Prueba de Turing pblica y automtica para diferenciar a mquinas y
humanos)
Se trata de una prueba desafo-respuesta utilizada en computacin para determinar cundo
el usuario es o no humano.
Confeccionaremos una imagen con un nmero aleatorio entre 1000 y 9999 y para dificultar
su lectura por un programa automtico de lectura lo rayaremos con lneas de distintos
colores.
Por ltimo incorporaremos almacenaremos el valor en una variable de sesin y validaremos
el valor que ingresa el usuario en un control de tipo TextBox.
a - Primero generamos un grfico dinmico (captcha.aspx.cs y captcha.aspx):
Tener en cuenta que el archivo captcha.aspx solo debemos agregar la propiedad
ContentType indicando que generar una imagen en formato gif):
<%@ Page ContentType="image/gif" Language="C#" AutoEventWireup="true"
CodeFile="captcha.aspx.cs" Inherits="captcha" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
Luego el cdigo de la clase ser:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;
}
protected void Button1_Click(object sender,
EventArgs e)
{
if (Session["codigo"].ToString() ==
this.TextBox1.Text)
{
Label1.Text = "Ingres el codigo correcto";
}
else
{
Label1.Text = "Incorrecto";
}
}
}
Luego mediante un if controlamos el valor del captcha y el valor ingresado por el usuario en
el textbox1. Mostramos en un label el resultado de la comparacin.
Cuando ejecutamos podemos ver que la imgen dinmica aparece en el formulario:
4 ?Grfico de tarta.
this.Response.Redirect("graficobarrahorizontal.aspx?v1="
+ this.TextBox1.Text +
"&v2=" +
this.TextBox2.Text +
"&v3=" +
this.TextBox3.Text);
}
}
Es decir redireccionamos al archivo graficobarrahorizontal.aspx pasando 3 parmetros en
la cabecera de la llamada.
El archivo que genera la imagen dinmica (graficobarrahorizontal.aspx.cs) es la siguiente:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;
Ejercicios propuestos
1 ? Confeccionar un grfico dinmico que genere un grfico de barras verticales.
2 ? Confeccionar un grfico dinmico que genere una barra porcentual (mostrar los
porcentajes que les corresponde a cada trozo fuera de la barra)
3 ? Generar una imagen a partir de otra y agregarle un texto en forma dinmica. En
algunos casos cuando se quiere proteger la propiedad de imgenes es aplicarles un texto
que indica que la imagen no puede ser usada en otro sitio para fines comerciales.
4 ? Confeccionar un algoritmo que permita ingresar los datos personales y luego genere
una tarjeta personal con dichos datos:
ej:.
Master Page
Conceptos.
Introduccin
Una Master Page o Pgina Principal es una estructura base para un conjunto de pginas
pertenecientes a un mismo sitio Web. Este esqueleto base se almacena en un archivo
independiente y luego es heredado por otras pginas que requieren esa estructura base.
Un ejemplo donde utilizar una pgina Master Page es la definicin de la cabecera y el pie
del sitio, luego todas las otras pginas del sitio heredan de dicha pgina. La ventaja
fundamental en este ejemplo es que si hay cambios en la cabecera del sitio solo debemos
hacerlos en la pgina principal y con esto se propaga en todas las pginas que heredan de
la misma.
1 ? Problema 1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8"/>
<title></title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Lo primero que vemos que es distinto con un WebForm es la directiva Master en lugar de
Page:
<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
Ahora agregaremos los hipervnculos en la parte superior y el pi de pgina:
<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="MasterPage.master.cs" Inherits="MasterPage"
%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8"/>
<title></title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="Default.aspx">Buscadores.</a>-
<a href="Default2.aspx">Peridicos.</a>-
<a href="Default3.aspx">Blogs.</a>
<hr />
<asp:ContentPlaceHolder id="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
<h3>Copyright 2015</h3>
</div>
</form>
</body>
</html>
Luego veremos que todas las pginas que hereden de esta mostrarn los tres
hipervnculos en la parte superior y el mensaje de Copyright en la parte inferior.
c ? Agregar un Web Forms que herede del Master Page que hemos creado. En la ventana
del ?Explorador de soluciones? presionamos el botn derecho del mouse y seleccionamos
?Agregar nuevo elemento?? y seleccionamos ?Web Forms?. Es importantsimo ahora
seleccionar el checkbox ?Seleccionar la pgina maestra?, tambin podemos cambiar el
nombre por defecto de la pgina (podemos llamarla Default.aspx):
Luego de presionar el botn Agregar y si seleccionamos correctamente ?Seleccionar la
pgina maestra? aparecer un nuevo dilogo para seleccionar el Master Page del cual
hereda nuestro Web Form:
El cdigo generado en forma automtico es el siguiente:
<%@ Page Title="" Language="C#"
MasterPageFile="~/MasterPage.master"
AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
</asp:Content>
d - De igual forma creamos las otras pginas (Default2.aspx y Default3.aspx):
Default2.aspx
<%@ Page Title="" Language="C#"
MasterPageFile="~/MasterPage.master"
AutoEventWireup="true"
CodeFile="Default2.aspx.cs" Inherits="Default2" %>
</asp:Content>
Default3.aspx:
<%@ Page Title="" Language="C#"
MasterPageFile="~/MasterPage.master"
AutoEventWireup="true"
CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head"
Runat="Server">
</asp:Content>
<asp:Content ID="Content2"
ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<a
href="http://www.microsiervos.com">Microsiervos</a><br
/>
<a href="http://www.alt1040.com">Alt 1040</a><br />
<a href="http://www.puntogeek.com">PuntoGeek</a><br />
</asp:Content>
Conceptos.
Introduccin
Hasta ahora, hemos aprendido a crear pginas web que utilizan el modelo postback. Con el
postback, las pginas estn perpetuamente reenvindose al servidor web y regenerndose.
Como desventaja del modelo postback tenemos que hay un parpadeo del contenido de la
pgina cuando tiene que refrescarse. Adems se tiene el problema que se reenvan todos
los datos al servidor.
Recientemente, una nueva generacin de aplicaciones web ha comenzado a aparecer que
se comportan ms como las aplicaciones de Windows que las tradicionales pginas web.
Estas aplicaciones se refrescan en forma rpida y sin parpadeos. Entre los ejemplos
notables incluyen el correo electrnico basado en web como Gmail y aplicaciones de la
cartografa como Google Maps.
Esta nueva generacin de aplicaciones web utiliza un conjunto de prcticas de diseo y
tecnologas conocidas como Ajax.
Una de las caractersticas fundamentales de Ajax es la capacidad para actualizar parte de
la pgina, mientras que deja el resto intacto.
AJAX son las siglas de Asynchronous JavaScript And XML. No es un lenguaje de
programacin sino un conjunto de tecnologas (HTML-JavaScript-CSS-DHTML-
PHP/ASP.NET/JSP-XML) que nos permiten hacer pginas de internet ms interactivas.
La caracterstica fundamental de AJAX es permitir actualizar parte de una pgina con
informacin que se encuentra en el servidor sin tener que refrescar completamente la
pgina. De modo similar podemos enviar informacin al servidor.
Veremos como ASP.Net nos esconde la complejidad de Ajax y nos permite una fcil
transicin entre aplicaciones web tradicionales y el nuevo modelo.
ASP.NET AJAX
Hay una variedad de formas de aplicar el Ajax en cualquier aplicacin Web, incluyendo
ASP.NET. Para ponerlo en prctica Ajax sin utilizar libreras, es necesario que se tenga una
comprensin profunda de JavaScript, porque es el lenguaje JavaScript el que se ejecuta en
el navegador, que solicita la nueva informacin del servidor web cuando sea necesario y la
actualizacin de la pgina en consecuencia.
Si bien JavaScript no es terriblemente complejo, es muy difcil de programar correctamente,
por dos razones:
- La aplicacin de los principales detalles de JavaScript vara de navegador a navegador,
que significa que necesita una enorme cantidad de experiencia para escribir una buena
pgina web que se ejecuta igual de bien en todos los navegadores.
- JavaScript es un lenguaje muy laxo que tolera muchos pequeos errores. La captura de
estos errores y la eliminacin de ellos es un proceso tedioso. An peor, el error puede ser
fatal en algunos navegadores y daina en otros, lo que complica la depuracin.
En este captulo, usted NO va a usar JavaScript directamente. Por el contrario, utilizar un
modelo de nivel superior llamado ASP.NET AJAX.
ASP.NET AJAX le da un conjunto de componentes del lado del servidor y los controles
ASP.NET tradicionales que puede utilizar en el diseo de su pgina web. Estos
componentes hacen automticamente todos el cdigo JavaScript que necesita para
obtener el efecto deseado. El resultado es que puede crear una pgina con Ajax. Por
supuesto, usted no obtendr el mximo control para personalizar hasta el ltimo detalle de
su pgina, pero usted recibir una gran funcionalidad con un mnimo de esfuerzo.
Extensiones Ajax
El Visual Studio .Net agrega una pestaa que agrupa los controles referidos a Ajax:
Para poder utilizar ASP.NET AJAX es necesario un control de tipo ScriptManager. Este
control es el cerebro de ASP.NET AJAX, Cuando disponemos un control de tipo
ScriptManager en el formulario aparece un cuadro gris, pero cuando ejecutemos dicha
pgina no aparecer, es decir el control ScriptManager no genera etiquetas HTML.
El control ScriptManager genera todo el cdigo JavaScript necesario para las llamadas
asncronas desde el navegador al servidor web.
Cada pgina que utiliza ASP.NET AJAX requiere solo una instancia de la clase
ScriptManager, indistintamente la cantidad de regiones que vallamos a actualizar
posteriormente.
Crear un sitio web llamado ejercicio022 y agregar un Web Form llamado Default.aspx
Disponemos en vista de cdigo las marcas HTML que nos provee el sitio youtube.com para
insertar en nuestra pgina el video. Luego la pgina Default en vista de cdigo queda:
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<iframe width="420" height="315"
src="https://www.youtube.com/embed/OE8WzYNRPNU"
frameborder="0" allowfullscreen></iframe>
</div>
</form>
</body>
</html>