Академический Документы
Профессиональный Документы
Культура Документы
Inmediatamente aparece un dilogo donde debemos seleccionar el lenguaje a utilizar (Visual C#) la
versin de Framework (por ejemplo 4.5.2), elegiremos crear "Sitio web vaco de ASP.NET" y la
carpeta donde se almacenarn todas las pginas de nuestro directorio (por ejemplo
c:\aspnetya\ejercicio001):
Ahora tenemos nuestro primer sitio web vaco, solo se ha creado un archivo de configuracin llamado
Web.config:
Creemos nuestra primer "Web Form" para esto debemos presionar el botn derecho del mouse
donde aparece el nombre de nuestra aplicacin "ejercicio001" y en este men seleccionar Agregar > Agregar nuevo elemento...:
En este dilogo seleccionamos el "Visual C#" como lenguaje base, luego "Formulario Web Forms" y
dejamos el nombre del archivo por defecto "Default.aspx":
Para nuestro primer ejemplo implementaremos el ?Hola Mundo? para ello en el recuadro central
seleccionamos la pestaa ?Diseo? y desde el cuadro de herramientas arrastramos un control de
tipo Label. Seguidamente desde el cuadro de propiedades ubicado en la pare inferior derecha de la
pantalla inicializamos la propiedad text con el mensaje que queremos que muestre nuestra ?Label?,
en nuestro caso ?Hola Mundo?. Una vez modificada la propiedad Text con el mensaje que queremos
mostrar y presionada la tecla Enter podemos ver como se actualiza la ventana de Diseo en la parte
centrar de nuestra pantalla:
Para probar nuestra pequea aplicacin desarrollada debemos presionar el tringulo verde que se
encuentra en la barra de botones, o desde el men de opciones: Depurar->Iniciar depuracin, o
presionar la tecla ?F5?.
Podemos ver que inmediatamente aparece el navegador configurado por defecto con el resultado
de la ejecucin de la pgina:
El Visual Studio 2015 instala un servidor web propio que est escuchando en un puerto desocupado.
Luego de cerrar la ventana del navegador debemos detener la depuracin de nuestra aplicacin para
poder modificarla, para esto podemos seleccionar desde el men Depurar -> Detener Depuracin o
presionar desde la barra de botones el cuadradito morado (luego de esto aparece el ?Cuadro de
herramientas?)
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
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
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):
En nuestro Web Form disponemos un objeto de la clase Label y un objeto de la clase Button.
La propiedad Text de la Label la inicializamos con el valor ?0? y la propiedad Text del objeto Button
lo inicializamos con la cadena "Sumar".
El objetivo es que cada vez que se presione el botn se actualice el contenido de la Label con el
valor actual ms uno.
La forma ms sencilla de generar dicho evento es hacer doble clic sobre el objeto Button. Otra forma
es seleccionar dicho objeto (Button) y en la ventana de propiedades seleccionamos el cono del
"rayo" y hacer doble clic sobre el evento Click:
Luego para el evento Button1_Click actualizamos el contenido de la propiedad Text de la Label con
el valor actual ms uno:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
int x = int.Parse(Label1.Text);
x++;
Label1.Text = x.ToString();
}
}
Debemos convertir a entero el contenido de la Label mediante el mtodo esttico Parse de la clase
int:
int x = int.Parse(Label1.Text);
Incrementamos en uno la variable x y la volvemos a mostrar en la Label:
x++;
Label1.Text = x.ToString();
Cuando ejecutamos la pgina cada vez que presionamos el botn se incrementa en uno el contenido
de la Label:
Hasta ahora hemos utilizado los controles de tipo Label y Button, ahora utilizaremos el control
TextBox. Crearemos una aplicacin que nos permita ingresar dos nmeros y luego en una Label
muestre la suma de los mismos.
(Si tenemos un sitio web abierto podemos cerrarlo seleccionando la opcin: Archivo->Cerrar solucin
y luego seguir los mismos pasos que vimos anteriormente para crear un nuevo sitio web ASP.NET)
Crearemos un sitio web llamado ejercicio003 y desarrollaremos la siguiente interfaz de usuario:
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
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
La clase int tiene un mtodo esttico llamado Parse y que tiene por objetivo recibir un String y retornar
el valor del mismo convertido a entero.
Luego de sumar mostramos en la Label el resultado de la suma de los dos valores ingresados (al
utilizar el operador + el string y el entero tenemos que se convierte suma automticamente a string)
Control RadioButton.
Para probar el funcionamiento del control RadioButton crearemos un nuevo sitio web llamado
ejercicio004.
Crearemos una interfaz de usuario similar al problema anterior, con la salvedad que le agregaremos
dos controles de tipo RadioButton para poder indicar si queremos sumar o restar los valores
ingresados:
Como vemos agregamos dos controles de tipo RadioButton, inicializamos las propiedades Text con
los textos ?Sumar? y ?Restar?. Luego para indicar que los controles RadioButton estn en el mismo
grupo debemos inicializar la propiedad GroupName con el mismo valor (con esto logramos que al
seleccionar un RadioButton el otro se desmarca), si nos olvidamos inicializar la propiedad
GroupName luego los dos controles de tipo RadioButton se podrn seleccionar en forma simultnea
(podemos asignar la propiedad GroupName de ambos controles con el valor "operacion").
Si queremos que alguno de los dos RadioButton aparezca seleccionado por defecto debemos
inicializar la propiedad Checked con el valor true.
La codificacin del evento click del objeto Button1 es el siguiente:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
Control CheckBox.
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:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
}
if (CheckBox2.Checked)
{
resultado = x1 - x2;
Label1.Text = Label1.Text + "La diferencia de los dos
valores es:" + resultado;
}
}
}
Disponemos dos if a la misma altura ya que ambos CheckBox pueden estar seleccionados. Previo a
los if borramos el contenido de la Label en el caso que tenga el resultado de operaciones anteriores.
Luego en el primer if verificamos si el primer CheckBox est seleccionado y procedemos a inicializar
la propiedad Text de la Label con el resultado de la suma de los dos valores ingresados,
seguidamente verificamos con un segundo if si el siguiente CheckBox est seleccionado, en caso
afirmativo agregamos al contenido actual de la Label el resultado de la diferencia de los valores
ingresados (Como vemos podemos aadir elementos HTML a la propiedad Text de una Label, luego
estas sern interpretadas por el navegador)
En el navegador tenemos el siguiente resultado:
Control ListBox.
Crearemos un sitio web (ejercicio006) que permita cargar dos valores y mediante un control ListBox
poder seleccionar si queremos sumar, restar, multiplicar o dividir dichos valores (como podemos
seleccionar varias operaciones en forma simultnea configuraremos la propiedad SelectionMode del
ListBox con el valor Multiple) cargamos en la propiedad Items las cuatro operaciones posibles.
Luego la interfaz visual a crear es la siguiente (insertamos tambin una Label luego del botn
?Calcular?, con el objetivo de mostrar los resultados):
Cuando se presiona el botn calcular verificamos cual de las opciones est seleccionada y
procedemos a calcular y mostrar los resultados.
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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:
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
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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.
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.
Para los controles HyperLink debemos inicializar las propiedades Text con el mensaje a mostrar en
el hipervnculo y mediante la propiedad NavigateUrl indicamos a que pgina se llama al ser
presionado:
El primer control HyperLink nos lleva al formulario web que permite cargar el nombre del visitante,
su pas y los comentarios.
El formulario web requiere tres objetos de la clase TextBox, al tercero donde se ingresan los
comentarios debemos inicializar la propiedad TextMode con el valor MultiLine.
Disponemos un control de tipo HyperLink para poder retornar a la pgina principal (Default.aspx)
Cuando se presiona el botn confirmar procedemos a almacenar los datos del formulario en el
archivo de texto, si existe los agregamos al final, en caso que no exista se crea el archivo.
Mostramos finalmente en una label que se almacenaron los datos.
El cdigo completo para registrar los datos es:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.IO;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
arch.WriteLine("Nombre:" + TextBox1.Text);
arch.WriteLine("<br>");
arch.WriteLine("Pais:" + TextBox2.Text);
arch.WriteLine("<br>");
arch.WriteLine("Comentarios<br>");
arch.WriteLine(TextBox3.Text);
arch.WriteLine("<br>");
arch.WriteLine("<hr>");
Cuando finalizamos de trabajar con el archivo procedemos a cerrarlo:
arch.Close();
Lectura del archivo de texto.
Creamos una pgina donde mostraremos todos los datos almacenados en el archivo de texto
visitas.txt.
El archivo de texto almacena los datos de los visitantes y las elementos HTML bsicas para hacer
los saltos de lnea y lneas separadoras entre comentarios, solo nos queda leer el archivo e ir
almacenndolo en la Label para que lo muestre.
Podemos disponer un control de tipo HyperLink para retornar a la pgina principal.
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.IO;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.IO;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
{
StreamReader arch1 = new StreamReader(Server.MapPath(".")
+ "/contador.txt");
string valor = arch1.ReadToEnd();
int contador = int.Parse(valor);
contador++;
arch1.Close();
StreamWriter arch2 = new StreamWriter(Server.MapPath(".")
+ "/contador.txt");
arch2.WriteLine(contador.ToString());
arch2.Close();
Label1.Text = contador.ToString();
}
else
{
StreamWriter arch = new StreamWriter(Server.MapPath(".") +
"/contador.txt");
arch.WriteLine("1");
arch.Close();
Label1.Text = "1";
}
}
}
Mediante un if verificamos si existe el archivo que almacena el contador (la clase File tiene un mtodo
esttico llamado Exists que retorna true si existe el archivo en la carpeta indicada):
if (File.Exists(Server.MapPath(".") + "/contador.txt"))
En caso que el archivo existe procedemos a abrirlo con el objetivo de leer su contenido:
StreamReader arch1 = new StreamReader(this.Server.MapPath(".")
+ "/contador.txt");
string valor = arch1.ReadToEnd();
int contador = int.Parse(valor);
contador++;
arch1.Close();
Luego procedemos a crearlo nuevamente y almacenar el valor que acabamos de leer, previo a
incrementarlo en uno (mostramos en la Label el valor del contador actual):
StreamWriter arch2 = new StreamWriter(Server.MapPath(".") +
"/contador.txt");
arch2.WriteLine(contador.ToString());
arch2.Close();
Label1.Text = contador.ToString();
Si el archivo no existe procedemos a crearlo almacenando el valor 1:
StreamWriter arch = new StreamWriter(Server.MapPath(".")
"/contador.txt");
arch.WriteLine("1");
arch.Close();
this.Label1.Text = "1";
Agenda de actividades.
Implementaremos un tercer problema utilizando como estructura de datos un archivo de texto.
Crearemos un sitio web llamado ejercicio010 (sitio web ASP.Net vaco) y agregaremos un Web Form
(Default.aspx) donde implementaremos una agenda.
Crear una interfaz visual similar a esta para administrar la agenda de actividades:
Disponemos del "Cuadro de herramientas" un objeto de la clase "Calendar", uno de tipo TextBox e
iniciamos su propiedad TextMode con el valor MultiLine y finalmente un Button.
Si queremos modificar la piel del objeto "Calendar" presionamos el botn derecho del mouse sobre
el objeto y elegimos la opcin "Formato Automtico..."
Debemos seleccionar el objeto Calendar y definir el evento "Selection_Changed" que se dispara
cuando el operador selecciona una fecha:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.IO;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
{
string fecha = Calendar1.SelectedDate.Day.ToString() +
Calendar1.SelectedDate.Month.ToString() +
Calendar1.SelectedDate.Year.ToString();
StreamWriter arch = new StreamWriter(Server.MapPath(".") + "/"
+ fecha, true);
arch.WriteLine(TextBox1.Text);
arch.Close();
}
protected void Calendar1_SelectionChanged(object sender, EventArgs
e)
{
string fecha = Calendar1.SelectedDate.Day.ToString() +
Calendar1.SelectedDate.Month.ToString() +
Calendar1.SelectedDate.Year.ToString();
if (File.Exists(Server.MapPath(".") + "/" + fecha))
{
StreamReader arch = new StreamReader(Server.MapPath(".") +
"/" + fecha);
TextBox1.Text = arch.ReadToEnd();
arch.Close();
}
else
TextBox1.Text = "";
}
}
Si lo ejecutamos podemos cargar actividades para el da seleccionado:
Ejercicio propuesto
1 ? Confeccionar un sitio que permita ingresar los datos del curriculum de una persona y
almacenarlos en un archivo de texto.
Clave primaria
Para crear la base de datos podemos hacerlo desde el Microsoft SQL Server Management Studio:
Si no tiene instalado el Microsoft SQL Server Management Studio puede seguir los pasos
indicados aqu.
Ya tenemos creada la base de datos 'base1' y la tabla 'usuarios', crearemos un sitio web vaco de
ASP.NET en el Visual Studio llamado ejercicio011.
Agregaremos 5 Web Form llamados:
Default.aspx
alta.aspx
consulta.aspx
baja.aspx
modificacion.aspx
La pgina Default.aspx solo tendr los hipervnculos a las otras pginas que tendrn por objetivo
efectuar una el alta de usuarios, otra la consulta, otra la baja y la ltima la modificacin:
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)
Definicin de la cadena de conexin con la base de datos en el archivo Web.config
-->
<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
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
string s =
System.Configuration.ConfigurationManager.ConnectionStrings["cadenacon
exion1"].ConnectionString;
SqlConnection conexion = new SqlConnection(s);
conexion.Open();
SqlCommand comando = new SqlCommand("select nombre,clave,mail
from usuarios " +
" where nombre='" + this.TextBox1.Text + "'", conexion);
SqlDataReader registro = comando.ExecuteReader();
if (registro.Read())
this.Label1.Text = "Clave:" + registro["clave"] + "<br>" +
"Mail:" + registro["mail"];
else
this.Label1.Text = "No existe un usuario con dicho
nombre";
conexion.Close();
}
}
Para poder recuperar los datos lo hacemos creando un objeto de la clase SqlDataReader e
inicializndolo mediante la llamada del mtodo ExecuteReader de la clase SQLCommand:
SqlDataReader registro = comando.ExecuteReader();
Luego recorremos el SqlDataReader (como este caso puede retornar cero o una fila lo hacemos
mediante un if:
if (registro.Read())
Si el mtodo Read retorna true luego podemos acceder a la fila recuperada con el select.
Baja
Seleccionamos del Explorador de soluciones la pgina baja.aspx y procedemos a elaborar la
siguiente interfaz visual:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
else
this.Label1.Text = "No existe un usuario con dicho
nombre";
conexion.Close();
}
protected void Button2_Click(object sender, EventArgs e)
{
string s =
System.Configuration.ConfigurationManager.ConnectionStrings["cadenacon
exion1"].ConnectionString;
SqlConnection conexion = new SqlConnection(s);
conexion.Open();
SqlCommand comando = new SqlCommand("update usuarios set " +
"clave='" + this.TextBox2.Text +
"',mail='" + this.TextBox3.Text +
"' where nombre='" + this.TextBox1.Text + "'",
conexion);
int cantidad = comando.ExecuteNonQuery();
if (cantidad == 1)
this.Label2.Text = "Datos Modificados";
else
this.Label2.Text = "No existe el usuario";
conexion.Close();
}
}
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.
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)
Conexin con la base de datos
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"
Y seguidamente seleccionamos el servidor (lo podemos copiar del Sql Server Management Studio)
y la base de datos que trabajaremos:
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.
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
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
}
protected void Button1_Click(object sender, EventArgs e)
{
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
Seleccionamos del Explorador de soluciones la pgina consulta.aspx y procedemos a elaborar la
siguiente interfaz visual (disponemos un TextBox, un Button, una Label, un HyperLink y un
SqlDataSoruce:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlDataSource1.SelectParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;
SqlDataReader datos;
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArguments.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
Seleccionamos del Explorador de soluciones la pgina baja.aspx y procedemos a elaborar la
siguiente interfaz visual:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
SqlDataSource1.SelectParameters["nombre"].DefaultValue =
TextBox1.Text;
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;
SqlDataReader datos;
datos =
(SqlDataReader)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
if (datos.Read())
{
TextBox2.Text = datos["clave"].ToString();
TextBox3.Text = datos["mail"].ToString();
}
else
Label1.Text = "No existe un usuario con dicho nombre";
}
protected void Button2_Click(object sender, EventArgs e)
{
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();
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:
Alta de rubros
Creamos la siguiente interfaz para poder cargar nombres de rubros:
Igual que en el concepto anterior debemos inicializar del objeto SqlDataSource la propiedad
ConnectionString y configurar la propiedad InsertQuery con el comando respectivo:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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:
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
darle
como
nombre
Ahora ya hemos dado todos los pasos para configurar el alto de artculos, debemos implementar el
evento clic del botn de alta:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
SqlDataSourceArticulos.InsertParameters["precio"].DefaultValue
= TextBox2.Text;
SqlDataSourceArticulos.InsertParameters["codigorubro"].DefaultValue =
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
Seleccionamos del Explorador de soluciones la pgina consultaarticulos.aspx y procedemos a
elaborar la siguiente interfaz visual (disponemos un TextBox, un Button, una Label, un HyperLink y
un SqlDataSource):
Es decir recuperamos la descripcin del artculo, su precio y la descripcin del rubro de la otra tabla
(recordar de presionar el botn ?Actualizar parmetros)
Debemos crear alias para los campos que tienen el mismo nombre en las tablas articulos y rubros.
El cdigo del evento clic es:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
System.Data.SqlClient;
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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";
}
protected void Button2_Click(object sender, EventArgs e)
{
SqlDataSourceArticulos.UpdateParameters["descripcion"].DefaultValue =
TextBox2.Text;
SqlDataSourceArticulos.UpdateParameters["precio"].DefaultValue
= TextBox3.Text;
SqlDataSourceArticulos.UpdateParameters["codigorubro"].DefaultValue =
DropDownList1.SelectedValue;
SqlDataSourceArticulos.UpdateParameters["codigo"].DefaultValue
= TextBox1.Text;
int cant;
cant = SqlDataSourceArticulos.Update();
if (cant == 1)
Label2.Text = "Se modifico el artculo";
else
Label2.Text = "No existe el codigo";
}
}
6. Control GridView
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.
Datos de una tabla
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:
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:
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}
A modo de ejemplo mostraremos de color amarillo las filas de los artculos con precio superior a 8.
Para esto codificamos el evento RowDataBound del GridView1:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
e.Row.BackColor = System.Drawing.Color.Yellow;
e.Row.Font.Bold = true;
}
}
}
}
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.
Esta informacin nos es muy til para mostrar informacin adicional sobre el registro en otro control
por ejemplo.
7. Controles de validacin
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
Crearemos un sitio web y lo llamaremos "ejercicio016". Luego agregaremos seis WebForm con los
siguiente nombres:
Default.aspx
Default2.aspx
Default3.aspx
Default4.aspx
Default5.aspx
Default6.aspx
Otra cosa que necesitamos hacer con ASP.Net 4.5 en adelante si no utilizamos JQuery es hacer la
siguiente configuracin en el archivo Web.config:
</system.web>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode"
value="None" />
</appSettings>
</configuration>
Controles de validacin
Control: RequiredFieldValidator
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:
Cuando ejecutemos la pgina podemos ver el cdigo que llega al navegador (en ella veremos las
funciones en JavaScript que automticamente el ASP.NET nos crea para facilitar la validacin)
Si queremos que al presionar el botn se redireccione a la pgina Default2.aspx en caso de haber
ingresado un nombre de usuario debemos codificar el mtodo click para dicho botn:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
La propiedad IsValid del WebForm almacena true si todos los controles de validacin dispuestos en
el formulario se validan correctamente. Es decir en este problemas si se ingresa algn caracter en
el control TextBox luego se puede pasar a la pgina ?Default2.aspx?.
Control: RangeValidator
El control RangeValidator especifica un valor mnimo y mximo para un control TextBox. Podemos
utilizar el control para chequear el rango de enteros, fechas, cadenas o valores reales.
Las propiedades ms importantes del control son:
ControlToValidate El campo del formulario a validar.
MinimumValue El valor mnimo a validar en el rango de valores.
MaximumValue El valor mximo a validar en el rango de valores.
Text El mensaje de error a mostrar.
Type El tipo de comparacin a ejecutar (valores posibles: String, Integer, Double, Date, Currency)
Para probar este control haremos una pgina que solicite ingresar la edad de una persona que se
postula para un trabajo (la misma debe estar en el rango de 18 a 35 aos)
Disponemos sobre el formulario los siguientes objetos: Label, TextBox, Button y un RangeValidator. La
interfaz que debemos implementar es la siguiente:
Si ejecutamos la pgina veremos que el mensaje aparece si ingresamos una edad que est fuera
del rango de 18 a 35 aos.
El cdigo a implementar al presionar el botn confirmar es el siguiente:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
{
Response.Redirect("Default3.aspx");
}
Es decir verificamos la propiedad IsValid del control RangeValidator (si tenemos un solo control en
el formulario preguntar por la propiedad IsValid del webform o del RangeValidator el resultado ser
idntico)
Control: CompareValidator
El control CompareValidator permite comparar un valor de un control con otro control o comparar el
valor de un control con un valor fijo.
Las propiedades ms importantes son:
ControlToValidate El campo del formulario a validar.
ControlToCompare El campo del formulario contra el cual se efecta la comparacin.
Operator El operador a utilizarse en la comparacin (los valores posibles son Equal, NotEqual,
GreaterThan, GreaterThanEqual, LessThan, LessThanEqual y DataTypeCheck)
Text El mensaje de error a mostrar.
Type El tipo de comparacin a ejecutar (valores posibles String, Integer, Double, Date, Currency)
ValueToCompare El valor fijo a comparar.
Para probar este control implementaremos una pgina que realizara el alta de la tabla usuarios
(debe permitir el ingreso del nombre de usuario y su clave, esta ltima dos veces, con el objetivo de
asegurarse que la ingres correctamente), emplearemos un objeto de la clase CompareValidator
para validar el ingreso repetido de la clave.
La interfaz visual de la pgina es:
Es importante inicializar la propiedad ControlToValidate con el objeto TextBox que carga la segunda
clave, luego que el operador carga la clave se procede a validar si el texto ingresado coincide en el
TextBox que hemos inicializado la propiedad ControlToCompare.
El cdigo a implementar al presionar el botn ?Confirmar?:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
Control: CustomValidator
El control CustomValidator permite validar el campo de un formulario con una funcin de validacin
propia. Debemos asociar nuestro control CustomValidator con un evento propio.
Para probar este control implementaremos una pgina que solicite el ingreso de un nmero mltiplo
de 5, en caso de ingresar un valor incorrecto mostraremos un mensaje de error.
La interfaz a implementar es la siguiente:
Ahora debemos codificar el evento ServerValidate que tiene el objeto CustomValidator1, a esto lo
hacemos desde la ventana de cdigo y lo podemos generar automticamente haciendo doble clic
sobre el control en la ventana de diseo:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
Para probar este control, haremos una pgina que solicite el ingreso de un mail y mostraremos un
error en caso que el usuario ingrese un mail mal formado.
La interfaz visual de la pgina es la siguiente:
Si ejecutamos el programa podremos ver que al abandonar el foco del TextBox aparecer el mensaje
de error en caso de ingresar un mail incorrecto:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default5 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (IsValid)
{
Response.Redirect("Default6.aspx");
}
}
}
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:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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
La componente FileUpload encapsula el envo y recepcin de un archivo en el servidor web.
Confeccionaremos una serie de pginas web para aprender a utilizar los mtodos y propiedades de
la clase FileUpload (Crear un sitio web llamado ejercicio017)
Crear un webform (Default.aspx) e implementar la siguiente interfaz:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
la pgina ASPX actual el objeto Server tiene el mtodo MapPath y para obtener el nombre del archivo
la propiedad llamada FileName.
Con esta nica lnea tenemos registrado en el servidor el archivo que se envi desde el navegador.
Almacenar el archivo en un subdirectorio.
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
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
Ejecutemos la pgina y subamos un par de archivos. Si no aparecen los archivos hay que presionar
el cono de "Actualizar" del "Explorador de soluciones".
Mostrar propiedades del archivo subido.
Crearemos un tercer webform (Default3.aspx) para ver como accedemos a distintas propiedades de
la clase FileUpload.
Disponemos sobre el webform un objeto de la clase FileUpload, un Button y cuatro Label.
Mostraremos el tamao del archivo en bytes, el nombre del archivo y finalmente el tipo de archivo.
El cdigo fuente para el evento clic es:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
control
FileUpload
almacena
en:
El tamao del archivo nos puede ser til si queremos limitar el peso del mismo.
Validar la existencia de otro archivo con el mismo nombre.
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
using
using
using
using
using
using
System;
System.Collections.Generic;
System.IO;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
Ejercicio Resuelto
En la base de datos 'base1' crear las tablas:
autos (patente char(6) primary key,
propietario varchar(50),
precio float,
codigomarca int,
foto varchar(100),
modelo int)
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
a ? Confeccionar el mantenimiento de la tabla marcas (altas, bajas y modificaciones ? utilizar un
GridView
Crear un Web Form llamado abmmarcas.aspx el cual debe permitir implementar las altas, bajas y
modificaciones de la tabla marcas.
Mediante un GridView implementamos las bajas y modificaciones. Codificamos por otro lado el alta.
Debemos disponer un SQLDataSource asociado a la tabla marcas y configurar las propiedades
ConnectionString, InsertQuery y SelectQuery. Tambin disponemos un GridView e inicializamos la
propiedad "Elegir origen de datos" con el SQLDataSource que hemos insertado.
La interfaz visual a implementar es:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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):
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
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
{
}
protected void Button1_Click(object sender, EventArgs e)
{
dsautos.SelectParameters["patente"].DefaultValue =
TextBox1.Text;
dsautos.DataSourceMode = SqlDataSourceMode.DataReader;
SqlDataReader registro =
(SqlDataReader)dsautos.Select(DataSourceSelectArguments.Empty);
if (registro.Read())
{
Image1.ImageUrl = registro["foto"].ToString();
Label1.Text = "Propiegario" + registro["propietario"] +
"<br>" +
"Precio:" + registro["precio"] + "<br>" +
"Modelo:" + registro["modelo"] + "<br>" +
"Marca:" + registro["descripcion"];
}
else
{
Label1.Text = "No existe un auto con dicha patente";
}
}
}
Y tenemos como resultado una pgina en tiempo de ejecucin similar a:
Punto d
Seleccionar de un DropDownList una marca y luego mostrar todas las fotos de autos de dicha marca.
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
Punto e
Implementar el borrado de un auto ingresando su patente.
Creamos un Web Form llamado "borrarauto.aspx" y diseamos una interfaz similar a esta:
Debemos consultar la tabla autos para recuperar el nombre del archivo almacenado del auto, para
ello inicializamos la propiedad SelectQuery con la siguiente consulta:
select foto from autos where patente=@patente
Luego tambin debemos implementar la propiedad DeleteQuery:
delete from autos where patente=@patente
Cuando se presiona el botn borrar procedemos a ejecutar los dos comandos SQL:
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.IO;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
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:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Data.SqlClient;
System.Linq;
System.Web;
System.Web.UI;
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.
9. Cookies y Session.
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)
cookie persistente : Creacin y acceso.
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
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
}
}
}
En el evento Load de la pgina verificamos si existe la cookie, en caso de existir la recuperamos de
la propiedad Cookies del objeto Request.
1 ? Mostrar el ltimo mail ingresado en un control TextBox.
Luego codificamos para el evento clic del botn y para el evento Page_Load:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
}
En el mtodo Load de la pgina verificamos si es la primera vez que pedimos la pgina (es decir que
no se recarga por presionar el botn) y si existe la cookie, en dicho caso cargamos el contenido de
la propiedad Text del control TextBox.
Luego de ingresar un mail en el control TextBox y presionar el botn ?Confirmar? se crea una cookie
llamada ?mail? y almacena el valor ingresado en el control TextBox. Seguidamente redirecciona a
la pgina ?Default4.aspx?. Si Luego volvemos a ejecutar la pgina Default3.aspx veremos que el
control TextBox aparece inicializado con el ltimo mail ingresado (Aunque apaguemos y prendamos
la mquina el ltimo mail aparecer dentro del control)
Como podemos ver una cookie es muy til si queremos almacenar datos de configuracin de un sitio
para cada visitante.
cookie de sesin : Creacin y acceso.
La diferencia de una cookie de sesin con una persistente es que las cookies de sesin permanecen
mientras no cerramos la instancia del navegador, luego el cdigo para crear una cookie de sesin
es similar a las cookies persistentes con la salvedad que no debemos especificar fecha de expiracin:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = this.Session["usuario"].ToString();
Label2.Text = this.Session["clave"].ToString();
}
}
Las variables de sesin se verifican su existencia igual que las cookies.
Ejercicio propuesto
1 ? Confeccionar un sitio que muestre noticias Deportivas, Polticas y Culturales. Mediante una
pgina de configuracin permitir que un visitante pueda especificar que tipo de noticias quiere ver en
la portada del sitio (emplear tres cookies)
Imgenes dinmicas
1 - Programa ?Hola Mundo?
Crearemos un sitio web llamado 'ejercicio020' y agregaremos el primer Web Form y le datemos como
nombre holamundo.aspx.
Para crear una imagen en forma dinmica debemos seguir una serie de pasos:
a - Debemos modificar el archivo webform (holamundo.aspx) agregando:
ContentType="image/gif"
<%@ Page ContentType="image/gif" Language="C#" AutoEventWireup="true"
CodeFile="holamundo.aspx.cs" Inherits="holamundo" %>
<!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.
2 ? Insercin de una imagen dinmica en un webform.
Para la incorporacin de la imagen en una pgina propiamente dicha debemos hacer lo siguiente:
Creamos una segunda pgina llamada paginaholamundo.aspx con un cdigo similar a este:
<%@
Page
Language="C#"
AutoEventWireup="true"
CodeFile="paginaholamundo.aspx.cs" Inherits="paginaholamundo" %>
<!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>
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
System.Drawing;
System.Drawing.Imaging;
{
protected void Page_Load(object sender, EventArgs e)
{
Bitmap mapabit = new Bitmap(100, 40);
Graphics lienzo;
lienzo = Graphics.FromImage(mapabit);
int nro;
Random r = new Random();
nro = r.Next(1, 10000);
Font fuente1 = new Font("Arial", 22);
SolidBrush pincel1 = new SolidBrush(Color.Red);
lienzo.DrawString(nro.ToString(), fuente1, pincel1, 4, 4);
//Dibujar lineas
for (int f = 1; f <= 10; f++)
{
int x1 = r.Next(1, 100);
int y1 = r.Next(1, 40);
int x2 = r.Next(1, 100);
int y2 = r.Next(1, 40);
Pen lapiz1 = new Pen(Color.FromArgb(r.Next(1, 255),
r.Next(1, 255), r.Next(1, 255)));
lienzo.DrawLine(lapiz1, x1, y1, x2, y2);
}
Session["codigo"] = nro.ToString();
mapabit.Save(Response.OutputStream, ImageFormat.Gif);
}
}
Hacemos el import de los dos espacios de nombres:
using System.Drawing;
using System.Drawing.Imaging;
En el mtodo Page_Load creamos un objeto de la clase BitMap indicando el ancho y el alto en
pxeles.
Obtenemos una referencia de la imagen almacenndola en una variable de tipo Graphics.
Bitmap mapabit = new Bitmap(100, 40);
Graphics lienzo;
lienzo = Graphics.FromImage(mapabit);
Generamos un valor aleatorio:
int nro;
Random r = new Random();
nro = r.Next(1, 10000);
Imprimimos el nmero dentro de la imagen:
Font fuente1 = new Font("Arial", 22);
SolidBrush pincel1 = new SolidBrush(Color.Red);
lienzo.DrawString(nro.ToString(), fuente1, pincel1, 4, 4);
Dibujamos 10 lneas de distintos colores en forma aleatoria tapando parcialmente el nmero
aleatorio:
for (int f = 1; f <= 10; f++)
{
int x1 = r.Next(1, 100);
int y1 = r.Next(1, 40);
Disponemos un objeto de la clase Image e inicializamos la propiedad ImageUrl con el nombre del
archivo que genera el grfico dinmico llamado captcha.aspx.
Para el evento Click del objeto Button1 disponemos el siguiente cdigo:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
4 ?Grfico de tarta.
Para implementar un grfico de tarta debemos emplear el mtodo FillPie de la clase Graphics.
Desarrollaremos una aplicacin que solicite en un webform (crear el archivo formulariotarta.aspx)
tres valores enteros por teclado y llamaremos a un grfico dinmico que mostrar un grfico de tarta
rescatando los valores del webform.
El webform enva mediante parmetros los datos ingresados.
El webform tiene la siguiente interfaz:
Y el cdigo que debemos implementar para el evento Click del objeto Button es:
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
System.Drawing;
System.Drawing.Imaging;
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
System.Drawing;
System.Drawing.Imaging;
lienzo = Graphics.FromImage(mapabit);
float valor1 = float.Parse(this.Request.QueryString["v1"]);
float valor2 = float.Parse(this.Request.QueryString["v2"]);
float valor3 = float.Parse(this.Request.QueryString["v3"]);
float mayor = this.RetornarMayor(valor1, valor2, valor3);
float largo1 = valor1 / mayor * 400;
SolidBrush pincel1 = new SolidBrush(Color.Red);
lienzo.FillRectangle(pincel1, 50, 50, 50 + largo1, 80);
float largo2 = valor2 / mayor * 400;
SolidBrush pincel2 = new SolidBrush(Color.Green);
lienzo.FillRectangle(pincel2, 50, 150, 50 + largo2, 80);
float largo3 = valor3 / mayor * 400;
SolidBrush pincel3 = new SolidBrush(Color.Blue);
lienzo.FillRectangle(pincel3, 50, 250, 50 + largo3, 80);
//Cantidades
SolidBrush pincel4 = new SolidBrush(Color.Black);
Font fuente1 = new Font("Arial", 30);
lienzo.DrawString(valor1.ToString(), fuente1, pincel4, 60,
80);
lienzo.DrawString(valor2.ToString(), fuente1, pincel4, 60,
160);
lienzo.DrawString(valor3.ToString(), fuente1, pincel4, 60,
260);
mapabit.Save(Response.OutputStream, ImageFormat.Gif);
}
private float RetornarMayor(float x1, float x2, float x3)
{
if (x1 > x2 && x1 > x3)
return x1;
else
if (x2 > x3)
return x2;
else
return x3;
}
}
El mtodo RotornarMayor recibe como parmetros tres float y retorna el mayor de los mismos:
private float RetornarMayor(float x1, float x2, float x3)
{
if (x1 > x2 && x1 > x3)
return x1;
else
if (x2 > x3)
return x2;
else
return x3;
}
El mtodo Load es el que crea el grfico de barra horizontal propiamente dicho.
Para graficar cada barra:
float largo1 = valor1 / mayor * 400;
SolidBrush pincel1 = new SolidBrush(Color.Red);
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:.
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
Problema:Crear un sitio web llamado ejercicio021 que permita mostrar un conjunto de direcciones
web agrupados por tema. Disponer una lista de hipervnculos con los siguientes temas: Buscadores
? Peridicos ? Blog
Mostrar en la parte inferior de la pgina un mensaje de Copyright.
Para crear un sitio que utilice una Master Page debemos seguir una serie de pasos:
a ? Creamos un nuevo sitio web (ejercicio021): Archivo -> Nuevo Sitio Web? y seleccionamos la
plantilla " Sitio web vaco "
b ? En la ventana del ?Explorador de soluciones? presionamos el botn derecho del mouse y
seleccionamos ?Agregar nuevo elemento?? y seleccionamos ?Pgina maestra?(en ingles Master
Page)
,dejamos
el
nombre
por
defecto
"MasterPage.master"
Las pginas Master Page tienen extensin master en lugar de aspx.
El cdigo generado en forma automtico es el siguiente:
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:
forma
creamos
las
otras
pginas
(Default2.aspx
Default3.aspx):
Como podemos observar al contenido definido en el archivo Default.aspx (los tres hipervnculos a
los buscadores) se a aadido todo lo definido en la Master Page (es decir los hipervnculos a las
categoras ?Buscadores?, ?Peridicos? y ?Blogs?, adems del mensaje en la parte inferior de la
pgina)
Luego cuando solicitamos las pginas Default2.aspx y Default3.aspx vemos que todas tienen el
contenido definido en el archivo MasterPage:
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.
Refresco parcial de pgina.
Confeccionaremos un problema sin utilizar AJAX y luego lo resolveremos utilizando AJAX y veremos
las ventajas que presenta.
El problema a resolver es mostrar un video del sitio de youtube.com, dispondremos un botn que
cuando se presione recuperar los comentarios existentes para dicho video (para hacer el problema
ms corto evitaremos extraer los comentarios de una base de datos)
>
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:
Hemos
dispuesto
el
cdigo
suministrado
Ahora en vista de Diseo agregamos un Button y una Label.:
por
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.UI;
System.Web.UI.WebControls;
youtube.com.
Para el evento click del botn realizamos el mismo cdigo hecho para la pgina anterior:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "1 - Muy buen video. <br> 2 - Correcto. <br>3 De lo mejor.";
}
}
Si ejecutamos la pgina Default2.aspx veremos que la experiencia del usuario visitante ser mejor.
Probemos de iniciar el video y luego presionar el botn ?Ver comentarios?, como observaremos el
video no se detiene y luego de un corto tiempo tenemos en la pgina los comentarios dispuestos en
dicho video.
La idea bsica es dividir su pgina web en una o ms regiones distintas, cada una de las que se
envuelve dentro de un UpdatePanel invisibles en tiempo de ejecucin. Cuando un evento ocurre en
un control que se ubicado dentro de un UpdatePanel, y este evento normalmente desencadena una
pgina completa postback, el UpdatePanel intercepta el evento y realiza una llamada asincrnica.
Aqu est un ejemplo de cmo esto sucede:
1. El usuario hace clic en un botn dentro de un UpdatePanel.
2. El UpdatePanel intercepta en el lado del cliente el clic. Ahora, ASP.NET AJAX realiza una llamada
al servidor en lugar de una pgina completa postback.
3. En el servidor, se ejecuta su ciclo de vida en forma normal, con todos los eventos habituales.
4. ASP.NET AJAX recibe todo el HTML y se actualiza cada UpdatePanel y los cambios que no estn
dentro de un UpdatePanel se ignoran.