Sunteți pe pagina 1din 98

Primera UNIDAD ASP.NET 3.

5 Visual Studio 2008


Definicin
ASP.NET es un Framework para aplicaciones web desarrollado y comercializado por Microsoft. Es usado por programadores para construir sitios web dinmicos, aplicaciones web y servicios web XML. es la tecnologa sucesora de la tecnologa Active Server Pages (ASP). Las pginas de ASP.NET, conocidas oficialmente como "web forms" (formularios web), son el principal medio de construccin para el desarrollo de aplicaciones web.8 Los formularios web estn contenidos en archivos con una extensin ASPX; en jerga de programacin, estos archivos tpicamente contienen etiquetas HTML o XHTML esttico, y tambin etiquetas definiendo Controles Web que se procesan del lado del servidor y Controles de Usuario donde los desarrolladores colocan todo el cdigo esttico y dinmico requerido por la pgina web.

Trabajando con ASP.Net en Visual Studio Ingresamos al Visual studio

Luego vamos a seleccionar Archivo Sitio Web, en este caso ingresamos a la siguiente ventana, donde seleccionamos el tipo de plantilla con el que deseamos trabajar, por ejemplo Sitio Web ASP.Net, permite trabajar con paginas ASP, otro Servicio WEB ASP.Net, permite trabajar con los servicios web (mas adelante tocaremos el tema a fondo)

En la grafica En la marca 1 hace mencin a la ubicacin de donde se puede trabajar, existen 3 tipos: FTP, HTTP y sistemas de Archivos (este ltimo no necesita tener el Servidor Web IIS instalado) En la marca 2 hacemos referencia al lengua de programacin con el cual nosotros queremos desarrollar, puede ser visual Basic, Visual C#

Ahora vamos analizar el entorno de trabajo donde empezaremos a desarrollar, este es el IDE, especificado, donde: El cuadro de herramientas, son los controles asp.net que se pueden adicionar a la pagina que vamos a crear. Editor o Navegador, es el lugar donde se disea o se escribe el cdigo para validar la pagina web que hemos creado. El explorador de Soluciones, es el ambiente donde se muestran los objetos, con los cuales se estn trabajando Explorador de Servidores, en donde podemos relacionarlos con los distintos servidores de Base de datos que tenemos, adems podemos manejar mediante una conexin las tablas de dicho manejadores. Propiedades, con las caracterstica del objeto donde me encuentro trabajando.

Cuando uno crea un proyecto en ASP.NET se generan los siguientes archivos: Archivos de solucin (.sln, .suo) Archivos de proyecto (.vbproj, .csproj) Archivos de aplicacin Web Formularios Web Forms ASP.NET(.aspx) Servicios Web ASP.NET (.asmx) Clases, pginas de cdigo subyacente (.vb o .cs) Clases de aplicaciones globales (.asax) Archivo Web.config Ensamblado del proyecto (.dll)

Conceptos Centrales de Asp


Separar presentacin de lgica del negocio Usar servicios provistos por el .NET Framework El cdigo es compilado la primera vez que se accede a una pgina Administracin de estado Utilizacin de cualquier lenguaje Integracin entre varios Actualizar archivos mientras se est ejecutando la aplicacin!

Arquitectura del Framework

Que Son Web Forms?


Pginas con extensin .aspx, Que incluyen la directiva @ Page <%@ Page Language="vb %> Utiliza el modelo de objeto del .Net Framework Contiene cdigo HTML y declaraciones de controles del lado del servidor Puede incluir Script del lado del cliente Puede incluir cdigo del lado del servidor

Y que son Controles al Lado del Servidor


Objetos programables que se ejecutan en el servidor Web, Exponen interfaces con propiedades y mtodos , Se encargan de generar el cdigo HTML correcto (Rendering), Son capaces de generar distinto HTML de acuerdo al Navegador, Se identifican por el atributo runat=server Tipos de Controles de Lado del Servidor HTML - Son los controles comunes de pginas HTML, pero capaces de utilizar el atributo runat=Server, Se encuentran definidos como objetos dentro del Namespace System.Web.UI.HtmlControls, ejemplo: input type="text" id="txtNombre" runat="server"> <span id="spnInicio" runat="server">Inicio</span> Web Controls - Son objetos que se ejecutan del lado del servidor, Poseen mayor funcionalidad, y pueden contener otros objetos Dependen del Namespace System.Web.UI.WebControls, ejemplo: <asp:TextBox id="txtNombree" runat="server" Text="[Ingrese su nombre]"/>

Como Trabajan los Controles del Servidor


Al procesarse la pgina, y encontrar un atributo runat=server, Se genera el cdigo HTML representativo del control, con sus propiedades, Asignndole a cada uno, un id nico, Se agrega al formulario un cuadro de texto oculto, para almacenar el estado de la pgina (__VIEWSTATE)

Controles WEB
Estos controles ASP .NET cumplen la misma funcionalidad que los de HTML. Los controles Web ofrecen un mayor nivel de abstraccin que los controles HTML. Cuando la pagina se carga en el navegador, e control Web determina el tipo de navegador que ha realizado la peticin y de acuerdo con esta informacion genera el codigo HTML apropiado, podemos decir que en este espacio se trata de controles inteligentes. <asp:nombrecontrol id = identificador runat = "server"> </asp:nombrecontrol> Los beneficios que se desprenden de utilizar controles Web sobre los controles HTML son: Se ofrece una convencion de nomenclatura para los controles similares. Existe propiedades comunes para todos los controles, ofreciendose un modelo de objeto mas robusto. Se incluyen propiedades fuertemente tipadas especificas de los controles. Se genera codigo HTML especifico para cada navegador Web Los Controles Web deben de ser utilizados en las siguientes situaciones: Preferimos un modelo de programacin similar a Visual Basic C#. Estamos escribiendo Web Forms que deben ser mostrados por varios tipos de navegadores. Se necesita una funcionalidad especifica, como puede ser un calendario o un rotador de anuncios, que se corresponden a los controles ricos, o bien necesitamos realizar algn tipo de validacin o presentacin de datos. Los Controles HTML deben de ser utilizados en las siguientes situaciones: Preferimos un modelo de objetos similar al lenguaje HTML. Estamos trabajando con paginas Web existentes y las queremos migrar a Web Forms.

El control debe de interactuar con script de cliente y de servidor, en lo que al tratamiento de eventos se refiere.

Algunos de los controles mas importantes:

Button, Este control Web representa un botn, es decir, un botn que envia el
contenido de un formulario al servidor. Esta clase se corresponde con el control <asp:Button>.

CheckBox, Este control Web tiene dos tratamientos distintos dentro de un


WebForm, como un control de entrada de datos del usuario (valor Verdadero o Falso); y el segundo comportamiento lo tendr si espesificamos el valor true en la propiedad AutoPostBack.

CheckBoxList, Este control Web permite utilizar una lista de seleccin mltiple de
los elementos de Checkbox. Este objeto posee una coleccin de Items que contiene todos los objetos Checkbox. Se puede especificar a traves de las propiedades RepeatLayout la distribucion de los CheckBox en la pagina.

DropDownList, Este control Web representa una lista desplegable. Tambin posee
la porpiedad AutoPostBack, si establecemos a True esta propiedad al seleccionar un elemento de la lista se enviar el formulario al servidor.

Image, Este control Web representa una imagen dentro de una pagina ASP .Net.
Para indicar la imagen que deseamos mostrar se utilizara la propiedad image URL.

ImageButton, Este control Web es muy similar al image, pero adems de mostrar
una imagen posee la caracterstica adicional de funcionar como un botn, se enva los contenidos del formulario al servidor.

LinkButton, Este control Web va a representa un estilo similar a los enlaces, este
representa a los HiperLink y ofrece la misma funcionalidad que el control Button.

ListBox, Este control Web representa una lista de de seleccin sencilla o mltiple, es
similar al control DropDownList, pero en este caso se muestran varios elementos de la lista y se permite la seleccin multiple.En la propiedad Rows indicamos el numero de filas visibles que va a mostrar el control y en la propiedad SelectionMode indicamos si se permite seleccin Multiple.

Panel, Este control Web se utiliza para agrupar controles y realizar la funcion de

contenedor de los mismos. El control Panel posee una propiedad llamada Controls que es una coleccin que contiene todos los controles incluidos dentro del objeto Panel.

PlaceHolder, Este control Web se utiliza tambien como contenedor de controles

Web. Se utiliza para aadir controles Web de forma dinamica en la pagina ASP .Net en un punto determinado, para ello se utiliza su propiedad Controls.

RadioButton, Este control Web representa un botn de opcin, permite seleccionar


una opcin dentro de un mismo grupo de opciones. Las opciones se agrupan mediante la propiedad GroupName.

El modelo Code-behind
Microsoft recomienda que para realizar programacin dinmica se use el modelo code-behind, o de respaldo, que coloca el cdigo en un archivo separado o en una etiqueta de script especialmente diseada. Los nombres de los archivos code-behind estn basados en el nombre del archivo ASPX tales como MiPagina.aspx.cs o MiPagina.aspx.vb (esta prctica se realiza automticamente en Microsoft Visual Studio y otras interfaces de desarrollo). El modelo code-behind de ASP.NET marca la separacin del ASP clsico y alienta a los desarrolladores a construir aplicaciones con la idea de presentacin y contenido separados en mente. En teora, esto permite a un diseador web, por ejemplo, enfocarse en la creacin del diseo con menos posibilidades de alterar el cdigo de programacin mientras lo hace. Veamos 2 formas de poder trabajar :

Separacin de Cdigo "Inline"


El siguiente ejemplo demuestra una simple pgina ASP.NET con tres controles de servidor, un TextBox, un Button, y un Label. Inicialmente, estos controles simplemente renderizan sus formularios HTML equivalentes. Sin embargo, cuando se escribe un valor en el TextBox y se hace clic en el Button, en el navegador cliente, la pgina enva la informacin al servidor y maneja el evento del clic en el propio cdigo de la pgina, actualizando dinmicamente la propiedad Text del control Label. Despus, la pgina se recarga para reflejar el texto actualizado. Este ejemplo simple demuestra los mecanismos bsicos que hay detrs del modelo de controles de servidor, que ha hecho que ASP.NET sea uno de los modelos de programacin Web ms sencillos de aprender y dominar. <%@ page language="VB" %> <script runat="server"> Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Label1.Text = "Bienvenidos " & TextBox1.Text End Sub </script> <html> <head> <title>ASP.NET Inline Pages</title> </head> <body> <form id="Form1" runat="server"> <h1>Bienvenidos a ASP.NET </h1> <b>Ingrese su Nombre:</b> <asp:TextBox ID="TextBox1" Runat="server"/> <asp:Button ID="Button1" Text="Click Me" OnClick="Button1_Click" Runat="server"/> <br /> <br /> <asp:Label ID="Label1" Text="Hola " Runat="server" /> </form> </body> </html>

Modelo Code Behind Simplificado


ASP.NET 2.0 introduce una rutina mejorada para pginas code-behind que simplifica las conexiones entre la pgina y el cdigo. En este nuevo modelo code-behind, la clase se declara como una clase parcial, lo que permite tanto al fichero de la pgina como al del cdigo ser compilador en una misma clase en tiempo de ejecucin. La pgina del cdigo hace referencia al fichero de code-behind en el atributo CodeFile de la directiva <%@ Page %>, especificando en nombre de la clase en el atributo Inherits. Hay que observar que los miembros de una clase code-behind deben ser o bien "public" o "protected" (no pueden ser privados). Imports Microsoft.VisualBasic Partial Class CodeBehind_vb_aspx Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Label1.Text = "Hola " & TextBox1.Text End Sub End Class <%@ page language="VB" CodeFile="CodeBehind_vb.aspx.vb" Inherits="CodeBehind_vb_aspx" %> <html> <head> <title>ASP.NET CodeBehind Pages</title> </head> <body> <form runat="server"> <h1>Bienvenidos ASP.NET.NET </h1> <b>Ingrese su Nombre:</b> <asp:TextBox ID="TextBox1" Runat="server"/> <asp:Button ID="Button1" Text="Click Me" OnClick="Button1_Click" Runat="server"/> <br /> <br /> <asp:Label ID="Label1" Text="Hola " Runat="server" /> </form> </body> </html>

Validando Informacin en una Pgina Web Utilizando Controles


Un aspecto importante de la creacin de pginas Web es la consistencia en la entrada de datos por el usuario que permite comprobar que la informacin que introducen los usuarios es vlida. Este grupo de controles nos permite validar la entrada dada por el usuario a travs de los controles de un WebForm, esta validacin se puede realizar en el cliente y en el servidor. ASP.NET ofrece un conjunto de controles de validacin que proporciona una forma eficaz y fcil de usar para comprobar errores y, si es necesario, mostrar mensajes al usuario. En los temas de esta seccin se describen los controles de validacin y cmo utilizarlos. Tenemos 6 controles de Validacin importante: Tipo de validacin Entrada requerida Comparacin con un valor Nombre del control RequiredFieldValidator CompareValidator Descripcin Garantiza que el usuario no omite una entrada. Compara los datos proporcionados por el usuario con un valor constante, con el valor de otro control (mediante un operador de comparacin como menor que, igual que o mayor que) o para un tipo de datos especfico. Comprueba que una entrada de usuario est entre los lmites superior e inferior especificados. Se pueden comprobar los intervalos entre pares de nmeros, caracteres alfabticos y fechas Comprueba que la entrada del usuario coincide con un modelo definido por una expresin regular. Este tipo de validacin permite comprobar secuencias de caracteres predecibles, como los que aparecen en las direcciones de correo electrnico, nmeros de telfono, cdigos postales, etc. Comprueba la entrada de usuario utilizando la validacin lgica que ha escrito. Este tipo de validacin permite comprobar valores derivados en tiempo de ejecucin Muchos no consideran un control de validacin a este, se encarga de poder agrupar todos los controles de validacin , y los presenta en forma de lista

Comprobacin del intervalo

RangeValidator

Coincidencia de modelos

RegularExpressionValidator

Definida por el usuario

CustomValidator

Listado de Errores

ValidationSummary

Detalle de los Controles de Validacion en ASP.Net


RequiredFieldValidator : Garantiza que el usuario no omita una entrada. Este control valida que
se ha rellenado un campo con un valor, es decir valida, los campos para que sean requeridos

Propiedades Importantes ID Nombre o identificador del control a validar ControlTovalidate Nombre del control que deseamos validar ErrorMessage Propiedades que especifican el texto y ubicacin del error o errores que aparecern si el usuario omite el control En este ejemplo se estn creando 2 controles (textbox), los cuales le vamos a relacionar el control RequiredFieldValidator, para decirle que necesitan obligatoriamente el ingreso de datos. <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html > <head runat="server"> <title>Control de Validacion RequeridFieldValidator</title> </head> <body> <form id="form1" runat="server"> Ingrese Nombre : <asp:TextBox ID="nombre" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="ValNombre" runat="server" ControlToValidate="nombre" ErrorMessage="Falta Ingresar Nombre" Display="Dynamic"></asp:RequiredFieldValidator> <br /> Ingrese Apellidos :<asp:TextBox ID="apellido" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="ValApellido" runat="server" ControlToValidate="apellido" ErrorMessage="Falta Ingresar Apellido" Display="dynamic" ForeColor="red"> </asp:RequiredFieldValidator> <br /> <asp:Button ID="boton" runat="server" Text="Ingresar" /> </form> </body> </html>

CompareValidator : Este control lo utilizaremos para comparar el valor que contiene un control WEB con un valor especifico, que puede ser un valor determinado como una constante o bien un valor de otro control Web

Propiedades Importantes ID Nombre o identificador del control a validar ControlTovalidate Nombre del control que deseamos validar ErrorMessage Mensaje de Error a Mostrar ValueToCompare Se utiliza cuando deseamos comparar el valor del control Web con un valor constante, esta propiedad tendr el valor constante ControlToCompare Cuando deseamos comparar el control WEB con otro control WEB Type Indica el tipo de dato de los valores que se van a comparar, esta propiedad puede ser Currency, Date, Double, Integer y String Operator Son las siguientes: Equal(igual) GreaterThan(Mayor) GreaterThanEqual(mayor o Igual) LessThan(Menor) LessThanEqual(menor o igual) NotEqual(distinto) DataTypeCheck(Validacion Tipo) Ahora desarrollaremos un ejemplo sobre este control, el cual compararemos los valores de una edad ingresada, para que sea mayor a cero y sea de tipo entero, adems adicionaremos una validacin de un RequiredFieldValidator <head> <title>Control de Validacion CompareValidator</title> </head> <body> <form id="form1" runat="server"> Edad : <asp:TextBox ID="edad" runat="server"/> <br /> <asp:CompareValidator ID="VComparaEdad" runat="server" ControlToValidate="edad" ValueToCompare="0" Type="Integer" Operator="GreaterThan" ErrorMessage="La edad debe ser Mayor a cero" Display="dynamic" Font-Italic="true" Font-Names="Courier" Font-Size="7"> </asp:CompareValidator> <br /> <asp:CompareValidator ID="VTipoEdad" runat="server" ControlToValidate="edad" type="Integer" Operator= "DataTypeCheck" ErrorMessage = "La edad debe ser un valor Entero" Display="Dynamic" Font-Italic="true" Font-Names="Courier" Font-Size="7"> </asp:CompareValidator> <br /> <asp:RequiredFieldValidator ID="ValEdad" runat="server" ControlToValidate="edad" ErrorMessage="Debe Indicar la Edad" Display="dynamic"> </asp:RequiredFieldValidator> <asp:Button ID="boton" runat="server" text="Valida" /> </form> </body> </html>

RangeValidator : Este control se utilizara cuando deseamos comprobar si un valor de entrada de


un control Web se encuentra comprendido en un rango determinado

Propiedades Importantes ID Nombre o identificador del control a validar ControlTovalidate Nombre del control que deseamos validar ErrorMessage Mensaje de Error a Mostrar MinimunControl Esta propiedad define el valor mnimo del rango permitido para el control MaximunControl Esta propiedad define el valor mximo del rango permitido para el control Type Indica el tipo de dato que se utiliza para comparar los valores dentro de un rango especificado, esta propiedad puede tener los siguientes valores Currency, date, Double, Integer y String. Este ejemplo permite el ingreso del valor de una nota, la cual debe encontrarse en el rango de 1 a 20, utilizaremos el control RangeValidator <%@ Page Language="VB" AutoEventWireup="false" CodeFile="default.aspx.vb" Inherits="default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Validacion RangeValidator</title> </head> <body> <form id="form1" runat="server"> Ingresa Nota<1- 20> :<asp:TextBox ID="valor" runat="server"></asp:TextBox> <br /> <asp:RangeValidator ID="ValRango" runat="server" ControlToValidate="valor" ErrorMessage="Debe Indicar valor entre 1 - 20" Display="dynamic" MinimumValue="1" MaximumValue="20" Type="integer"></asp:RangeValidator> <br /> <asp:Button ID="boton" runat="server" Text="Ingresar" /> </form> </body> </html>

RegularExpressionValidator : comprueba si el valor de un control de entrada coincide con el


modelo definido por una expresin regular, este tipo de validacin permite comprobar secuencias de caracteres previsibles mediante un formato seleccionado, como las de las direcciones de correo electrnico, los nmeros de telfono y los cdigos postales, etc.

Asp.Net nos provee de formatos pre establecidos para la validacin de la informacin ingresada, tal como se aprecia en la figura:

Propiedades Importantes ID ControlTovalidate ErrorMessage ValidationExpression

Nombre o identificador del control a validar Nombre del control que deseamos validar Mensaje de Error a Mostrar Formato que va a permitir generar la validacin, segn como lo hemos definidos Este ejemplo permite validar que un nmero de DNI sea de 8 dgitos <html><head > <title>Control RegularExpression</title></head> <body> <form id="form1" runat="server"> Nro DNI :<asp:TextBox ID="valor" runat="server"></asp:TextBox> <br /> <asp:RegularExpressionValidator ID="ValExpresion" runat="server" ControlToValidate="valor" ErrorMessage="El DNI es de 8 digitos" Display="dynamic" ValidationExpression="[0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9]"> </asp:RegularExpressionValidator> <br /> <asp:Button ID="boton" runat="server" Text="Validar" /> </form> </body> </html>

Otro Ejemplo de Expresiones Regulares Realicemos el siguiente Ejemplo:

Su Cdigo es el Siguiente <html> <head> </head> <body> <h3><font face="Verdana">Ejemplos de expresiones regulares</font></h3> <p> <form runat="server"> <table cellpadding=10> <tr valign="top"> <td colspan=3> <asp:Label ID="lblOutput" Text="Escribir valores para cada campo" Font-Name="Verdana" Font-Size="10pt" runat="server" /> </td> </tr> <tr> <td align=right> <font face=Verdana size=2>Correo electrnico:</font> </td> <td> <ASP:TextBox id=TextBox1 runat=server /> </td> <td> <asp:RequiredFieldValidator id="RqFVal" runat="server" Font-Size="10pt" ControlToValidate="TextBox1" Display="Dynamic" Font-Name="Verdana"> * </asp:RequiredFieldValidator> <asp:RegularExpressionValidator id="RegExpressionValidator1" runat="server" ControlToValidate="TextBox1" ValidationExpression="^[\w-]+@[\w-]+\.(com|net|org|edu|mil)$" Display="Static" Font-Name="verdana" Font-Size="10pt"> Email Incorrecto </asp:RegularExpressionValidator> </td> </tr> <tr><td align=right> <font face=Verdana size=2>Telfono:</font> </td> <td> <ASP:TextBox id=TextBox2 runat=server /> </td> <td> <asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server" Font-Size="10pt" ControlToValidate="TextBox2" Display="Dynamic" Font-Name="Verdana" > * </asp:RequiredFieldValidator> <asp:RegularExpressionValidator id="RegExpressValidator2" ControlToValidate="TextBox2" ValidationExpression="(^x\s*[0-9]{5}$)|(^(\([1-9][0-9]{2}\)\s)?[1-9][0-9]{2}-[0-9]{4}(\sx\s*[0-9]{5})?$)" Display="Static" Font-Name="verdana" Font-Size="10pt" runat=server> Debe tener el siguiente formato: (###)###-#### </asp:RegularExpressionValidator> </td> </tr> <tr><td align=right> <font face=Verdana size=2>Cdigo postal:</font> </td> <td> <ASP:TextBox id=TextBox3 runat=server /> </td> <td> <asp:RequiredFieldValidator id="ReqFieldVal3" runat="server" Font-Size="10pt" ControlToValidate="TextBox3" Display="Dynamic" Font-Name="Verdana"> * </asp:RequiredFieldValidator> <asp:RegularExpressionValidator id="RegrExpVal" ControlToValidate="TextBox3" ValidationExpression="^\d{5}$" Display="Static" Width="100%" Font-Name="verdana" Font-Size="10pt" runat=server> El cdigo postal debe tener 5 dgitos numricos </asp:RegularExpressionValidator> </td> </tr> <tr> <td></td> <td> <ASP:Button text="Validar" OnClick="ValidateBtn_Click" runat=server /> </td> <td></td> </tr> </table></form> </body></html>

CustomValidator : Se Utilizara para realizar Validaciones personalizadas, este control llamara a


una funcin definida por el usuario que ser la que realice la validacin. propiedades : ClientValidationFunction - indicaremos el nombre de la funcin del lado del cliente que realizara la validacin deseada, en este caso la funcin ser desarrollada en un lenguaje Script OnServerValidate - Debemos indicar el nombre de la funcin del servidor que se va a encargar de la validacin correspondiente, esta funcin se ejecutara cuando se produzca el evento ServerValidate.

Propiedades Importantes ID ControlTovalidate Value IsValid

Nombre o identificador del control a validar Nombre del control que deseamos validar Valor del control a validar en el momento de ser enviado Permite devolver un estado Verdadero o falso, segn la validacin realizada

En este ejemplo, se desea validar un numero ingresado por teclado, en el se podrn ingresar un numero el cual ser validado en forma customizada, dependiendo de la funcin con la cual se desea trabajar

Ahora veamos el cdigo que se genero: <html> <head> <script language="C#" runat=server> void ValidateBtn_OnClick(object sender, EventArgs e) { if (Page.IsValid) { lblOutput.Text = "Pgina vlida"; } else { lblOutput.Text = "Pgina no vlida :-("; } } void ServerValidate (object source, ServerValidateEventArgs value) { try { int num = Int32.Parse(value.Value); if (num%2 == 0) { value.IsValid = true; return; } } catch (Exception) {} value.IsValid = false; } </script> </head> <body> <h3><font face="Verdana">Ejemplo CustomValidator</font></h3> <p> <form runat="server"> <asp:Label id=lblOutput runat="server" Text="Escribir nmero par:" Font-Name="Verdana" Font-Size="10pt" /><br> <p> <asp:TextBox id=Text1 runat="server" /> <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ControlToValidate="Text1" ErrorMessage="Escribir un nmero" Display="Dynamic" Font-Name="verdana" Font-Size="10pt"> </asp:RequiredFieldValidator> <asp:CustomValidator id="CustomValidator1" runat="server" ControlToValidate="Text1" ClientValidationFunction="ClientValidate" OnServerValidate="ServerValidate" Display="Static" Font-Name="verdana" Font-Size="10pt"> No es un nmero par </asp:CustomValidator> <p> <asp:Button text="Validar" onclick="ValidateBtn_OnClick" runat="server" /> <script language="javascript"> function ClientValidate(source, arguments) { if (arguments.Value%2 == 0) arguments.IsValid = true; else arguments.IsValid = false; } </script> </form> </body> </html>

ValidationSummary : Este control difiere del resto, ya que en realidad no va a realizar un tipo de
validacin determinada, sino que contiene todos los mensajes de error que se han producido y muestra una lista de ellos en la pagina(los cuales hallan fallado)

Propiedades Importantes: ID Nombre o identificador del control a validar HeaderText Contendr el texto que va a mostrarse como cabecera a modo de descripcin de errores ShowSummary que puede tener los valores true o false, Indicara si deseamos mostrar o no el resumen de validacin de la pagina DisplayMode La forma en la que se va a mostrar las distintas descripciones de cada uno de los errores de validacin encontrados en la pagina, pueden ser : BulletList(una lista con puntos), List(una LIsta) y SingleParagraph(un nico prrafo)

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default13.aspx.vb" Inherits="Default13" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Control de Validacion Validation Summary</title> </head> <body> <form id="formulario" runat="server" method="post"> <h3>Validacion de Controles </h3> Valor Uno : <asp:TextBox ID="ValUno" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="ValidaUno" runat="server" ControlToValidate="ValUno" ErrorMessage="Debe Indicar el Valor UNO" Display="Dynamic"> * </asp:RequiredFieldValidator> <br /> Valor Dos : <asp:TextBox ID="ValDos" runat="server"></asp:TextBox> <asp:CompareValidator ID="ValidaDos" runat="server" ControlToValidate="ValDos" Operator="GreaterThan" ValueToCompare="10" ErrorMessage="El Valor 2 debe ser mayor a 10" Display="Dynamic" Type="Integer"> * </asp:CompareValidator> <br /><br /> <asp:Button ID="boton" runat="server" Text="Enviar Datos" /><br /> <asp:ValidationSummary ID="resumen" runat="server" HeaderText="Se han cometido los siguientes errores en la Pagina" ShowSummary="true" DisplayMode="BulletList" /> </form> </body> </html>

Ejemplo de Controles de Validacin


Hemos desarrollado los ejemplos de control de validacin a travs del ambiente Source, ahora desarrollamos un ejemplo en forma grafica. Para la creacin de estos controles primero necesitamos crear una tabla HTML, el cual debe ser escrito a nivel HTML, de la siguiente forma:

Ahora dentro de la tabla HTML anteriormente creada, disearemos el siguiente formulario

Definicin de los nombres de los controles, estos deben cambiarse dentro de la propiedad ID del control seleccionado:

txtApellido s txtEdad txtEmail txtFecNac

Dentro de estos se debe crear lo siguientes controles de RequiredFieldValidator, con los nombres reqNombres, reqApellidos, remedad, reqEmail, reqFecNac como se muestra en la siguiente grafica:

Configurando los controles de validacin: reqNombres: ID = reqNombres ErrorMesage = Debe escribir su nombre Text =* ControlValidate = txtNombre Completar lo mismo para los dems controles, con descripciones que correspondan. Nuevamente sobre los controles de validacin para la Edad colocamos un RangeValidator con el nombre reqValidaEdad reqValidadEdad: ID = reqValidadEdad ErrorMesage = Su edad no es permitida Text =* MaximumValue = 45 MinimumValue = 18 ControlValidate = txtEdad Luego agregamos un RegularExpressionValidator al lado del campo Email con las siguientes propiedades: reqValidadEmail: ID = reqValidadEmail ErrorMesage = Su correo no es correcto Text =* ControlValidate = txtEmail ValidationExpression =

Finalmente colocamos al costado del campo Email, el control CustomValidator, reqValidadEmailPers: ID = reqValidadEmailPers ErrorMesage = Su correo no es valido Text =* ControlValidate = txtEmail VI.- Finalmente colocamos en control ValidationSummary en la parte final con las siguientes propiedades: reqErrores ID= reqErrores HeaderText = Errores Encontrados BorderWith = 1 BorderOutset = OutSet Al final este diseo quedara como sigue:

Dar doble clic sobre el control CustomValidator el cual se mostrara lo siguiente:

Dentro de la funcin reqValidadEmailPers_ServerValidate escribimos lo siguiente:

Ahora debemos crear uno para validar el cdigo postal, con la condicin de que el formato del cdigo postal sea el siguiente: ##*###*##*## (Pas) * (Provincia) * (Ciudad) * (Local)

Manejando Estilos en los Controles WEB


Tenemos los siguientes tipos de Controles de Estilo:

Por Propiedades
Una de las formas de utilizar estilos con los controles WEB es a travs de una serie de propiedades que representan los prpios controles WEB. Esta propiedades se encuentran tipiadas y representan los estilos mas frecuentes que pueden aplicarse al control, color, tamao, letra, color de fondo, etc. Ejemplo de estilos por Propiedades <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Controles Web de Estilos - Por Propeidades</title> </head> <body> <form id="form1" runat="server"> <asp:Label runat="server" ID="etiqueta" BackColor="yellow" BorderColor="red" BorderStyle="Dotted" ForeColor="Green" Font-Size="18" Font-Bold="true" Font-Names="Verdana"> Ejemplo de Estilos por Propiedades sobre Controles </asp:Label> </form> </body> </html>

Controles Web Avanzados


Panel - Representa un control que acta como contenedor de otros controles. El control Panel es
un contenedor de otros controles. Resulta especialmente til si desea generar controles mediante programacin, ocultar o mostrar un grupo de controles o adaptar un grupo de controles. La propiedad Direction es til para adaptar el contenido de un control Panel con el fin de mostrar texto para idiomas que se escriben de derecha a izquierda, como el rabe o el hebreo. Espacio de nombres: System.Web.UI.WebControls Ensamblado: System.Web (en system.web.dll) Ejemplo Mostramos como podemos utilizar el Panel, creo un nuevo WebForm, dentro del cual arrastraremos 2 controles, el Panel y un control checkbox

Luego de haber insertado los controles, debemos cambiar al checkbox la propiedad del AutoPostBack = trae y la propiedad Checked= true

Luego de esto empezamos a codificar el control Checkbox, ingresando a la propiedad CheckedChanged Protected Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged Panel1.Visible = CheckBox1.Checked End Sub

Multiview - El control MultiView es un contenedor para un grupo de controles View. Permite definir un grupo de controles View en el que cada control View contiene controles secundarios. A continuacin, la aplicacin puede representar un control View concreto en el cliente basndose en criterios como la identidad del usuario, las preferencias del usuario e informacin pasada en un parmetro de cadena de consulta. El control MultiView tambin se puede utilizar para crear asistentes. En este escenario, cada control View contenido en un control MultiView representa un paso o pgina diferente del asistente. Este control tambin se debe utilizar para desarrollar aplicaciones de mltiples pantallas para dispositivos mviles. Espacio de nombres: System.Web.UI.WebControls Ensamblado: System.Web (en system.web.dll) Haber realicemos un ejemplo para entender mejor, como trabaja el Multiview, agregamos un control multiview y dentro de el agregemos 4 controles View

Luego de eso agregamos un control RadioButtonList, y daremos click en su propiedad Edit Items, para agregar los tems.

Ahora agregamos los 4 tem que van a ser relacionado a los view(dando clic en el botn Add(agregar) y modificando la propiedad Text, por el numero de ndice al cual pertenece)

Ahora en el control MultiView, modificar la propiedad ActiveViewIndex, para que el primer ndice sea el numero 0

Tambin se debe modificar la propiedad del MultiView el AutoPostBack en trae Luego se debe codificar el siguiente cdigo: Protected Sub RadioButtonList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButtonList1.SelectedIndexChanged Dim indice As Integer = CInt(RadioButtonList1.SelectedValue) MultiView1.ActiveViewIndex = indice End Sub Y ahora UD puede probar, y ver el funcionamiento de esto. FileUpload - Muestra un control de cuadro de texto y un botn de bsqueda que permiten a los usuarios seleccionar un archivo para cargarlo al servidor. La clase FileUpload muestra un control de cuadro de texto y un botn de bsqueda que permiten a los usuarios seleccionar un archivo en el cliente y cargarlo en el servidor Web. El usuario especifica el archivo que desea cargar escribiendo su ruta de acceso completa en el equipo local (por ejemplo, C:\Archivos\Prueba.txt) en el cuadro de texto del control. Tambin puede seleccionar el archivo haciendo clic en el botn Examinar y buscndolo despus en el cuadro de dilogo Elegir archivo. Espacio de nombres: System.Web.UI.WebControls Ensamblado: System.Web (en system.web.dll) Para entender este control. Hagamos un ejemplo sencillo, arrastremos sobre el Webform, un control FileUpLoad y un Button, la pagina quedara de la siguiente manera

Ahora codificamos lo siguiente en el evento click de button Cargar Archivos Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click 'Carga el Archivo en el servidor FileUpload1.SaveAs(Server.MapPath("~/" + FileUpload1.FileName)) End Sub

Clase WebBrowser
Iniciarse en el aprendizaje de las nuevas funcionalidades de Visual Basic 2008, mostrando la clase WebBrowser, nueva en .NET Framework 3.0 y 3.5, que permite mostrar pginas web dentro de un formulario; sto tambin es posible en .NET Framework 1 recurriendo al control OCX AxInterop.SHDocVw pero la facilidad de uso y la potencia de programacin de la nueva clase es muy superior Aprender a utilizar la nueva funcin incorporada en Visual Studio 2005 que permite configurar propiedades de aplicacin (application settings) o de usuario (user settings) guardndolas en un archivo XML; aqu se emplea para guardar el tamao y la posicin que tiene la ventana principal al cerrarse para que, en el siguiente arranque, lo haga con idntico aspecto Leer y escribir en un archivo de texto en el que se guarda el historial de pginas visitadas en la sesin para mostrarlas en un control ComboBox que hace la funcin de barra de direcciones Definicion de la clase WebBrowser La clase WebBrowser permite alojar pginas web, y cualquier otro documento que pueda ser mostrado por un navegador web, en aplicaciones de Windows Forms. El control WebBrowser tiene propiedades, mtodos y eventos que permiten la navegacin como, por ejemplo: - Url - Navigate - GoBack - GoForward - GoHome - Stop - Refresh - GoSearch Los principales eventos que vamos a manejar son: - Navigating: ocurre cuando WebBrowser est navegando hacia el documento nuevo - Navigated: ocurre cuando WebBrowser ha navegado hasta el nuevo documento y ha comenzado a cargarlo, reemplazando al documento anterior - DocumentCompleted: ocurre cuando se ha completado la carga de la pgina Clase HtmlWindow Representa la ventana lgica que contiene una o ms instancias de HtmlDocument (WebBrowser.Document) y no se debe confundir con la ventana del Windows Form o de API Win32. HtmlWindow proporciona capacidades de alto nivel para conocer o manipular un documento web mostrado en un control WebBrowser. HtmlWindow se puede usar para abrir ventanas nuevas que contienen documentos nuevos. El mtodo Open() carga la URL especificada en la misma ventana mientras que el mtodo OpenNew() abre la URL en una nueva ventana. La propiedad HtmlWindow.History contiene un objeto con las URL recientemente visitadas, que son las URL por las que ha navegado el usuario desde la ventana actual, y proporciona mtodos para moverse entre esas pginas. En este ejercico se ha preferido crear un historial propio en vez de mostrarlo desde History porque, a cambio de perder las funcionalidades de dicha propiedad, permite aprender a leer y escribir en un fichero de texto y a cargar dicho fichero en un ComboBox.

Claves del registro de la API de Internet Explorer Las claves contenidas en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AboutURLs especifican el comportamiento del navegador en ciertas circunstancias (pgina en blanco, navegacin cancelada, pgina no encontrada, etc.): blank: REG_SZ por defecto es "res://mshtml.dll/blank.htm" repost: REG_SZ por defecto es "res://mshtml.dll/repost.htm" PostNotCached: REG_SZ por defecto es "res://mshtml.dll/repost.htm" NavigationFailure: REG_SZ por defecto es "res://shdoclc.dll/navcancl.htm" DesktopItemNavigationFailure: REG_SZ por defecto es "res://shdoclc.dll/navcancl.htm" NavigationCanceled: REG_SZ por defecto es "res://shdoclc.dll/navcancl.htm" OfflineInformation: REG_SZ por defecto es "res://shdoclc.dll/offcancl.htm"

Ejemplo
El control WebBrowser est incluido en la caja de herramientas en el apartado Controles Comunes. Para configurar datos de usuario, hay que abrir las propiedades del proyecto y, en la pestaa Settings, aadir nombre, tipo, visibilidad (application o user) y valor asignado. Estos valores permanecen siempre como valores por defecto y, si se desea recuperarlos en tiempo de diseo, slo hay que pulsar el botn Sincronizar. En este ejercicio se han creado 4 propiedades que guardan el valor en pxeles del tamao y anchura de la ventana:

Esto se traduce en cdigo XML que se guarda dentro del proyecto en el archivo Nombre_del_ensamblado.config y ms tarde, en tiempo de ejecucin, en la configuracin del usuario que corresponda, en la carpeta Documents and settings: <userSettings> <Navegador_Web.My.MySettings> <setting name="Anchura" serializeAs="String"> <value>740</value> </setting> <setting name="Altura" serializeAs="String"> <value>560</value> </setting> <setting name="Izquierda" serializeAs="String"> <value>100</value> </setting> <setting name="Derecha" serializeAs="String"> <value>100</value> </setting> </Navegador_Web.My.MySettings> </userSettings> Se accede a ellas mediante la clase MySettings usando la palabra clave My, es posible asignar su valor a la propiedad de la aplicacin que se desea configurar: 'obtener los datos de la configuracin guardada al cerrar el formulario por ltima vez Me.Width = My.Settings.Anchura Me.Height = My.Settings.Altura Me.Left = My.Settings.Izquierda Me.Top = My.Settings.Derecha

Y tambin se puede modificar su valor y guardarlo al salir de la aplicacin; el mtodo especfico que guarda la configuracin es ChangeAndPersistSettings() pero tambin se puede utilizar en su lugar la opcin "Save My.Settings on shutdown" de la pestaa Application en las propiedades del proyecto: Sub ChangeAndPersistSettings() My.Settings.Altura = Me.Height My.Settings.Anchura = Me.Width My.Settings.Izquierda = Me.Left My.Settings.Derecha = Me.Top 'guardar la configuracin My.Settings.Save() End Sub

Cargar el ComboBox desde un archivo de texto Ya se ha dicho que para mostrar las pginas visitadas, en vez de recurrir a la propiedad History, el historial se guarda en un archivo de texto que se lee al arrancar la aplicacin y desde all se rellena el ComboBox que hace la funcin de barra de direcciones (si el archivo de texto no existe, la aplicacin arranca con el ComboBox en blanco y, cuando se cierra, se crea el archivo de texto con el historial de las pginas visitadas en la sesin): 'nombre del fichero de texto que guarda los sitios visitados Private Const FILE_NAME As String = "Historia.txt" 'rellenar ComboBox desde el archivo Historia.txt ' 'variable para cada lnea del fichero de texto Dim line As String 'si el fichero no existe -> no hacer nada (se crear uno al cerrar el programa) If Not File.Exists(FILE_NAME) Then Return Else 'StreamReader representa un lector que puede leer una cadena secuencial 'de caracteres desde un flujo de bytes, contiene al archivo de texto Dim sr As StreamReader sr = New StreamReader(FILE_NAME) ' 'leer las lneas del archivo hasta el final Do line = sr.ReadLine() 'si el texto de cbUrl no existe en el ComboBox, aadirlo a la lista 'pero slo si la lnea no est en blanco Dim n As Integer 'FindString busca en ListBox y ComboBox sin distinguir maysculas y minsculas, 'si encuentra el elemento buscado, devuelve el ndice desde cero del elemento, 'devuelve -1 si no lo encuentra n = cbUrl.FindString(line) 'una comprobacin ms de que la lnea no est en blanco, 'sin ella salta un error despus de leer la ltima lnea con texto ' porque la comprobacin en el bucle Do...Loop Until est al final If Not line Is Nothing Then If (n = -1) Then cbUrl.Items.Add(line) End If End If Loop Until line Is Nothing ' 'cerrar StreamReader sr.Close()

Pagina de recuperacin de Pginas Visitadas

Guardar el ComboBox en un archivo de texto Al cerrar la aplicacin se llama al mtodo guardarArchivo() que vuelca el contenido del Combobox en un archivo de texto de manera que cada tem de la lista sea una lnea del texto: 'guardar el archivo de texto con el historial Private Sub guardarArchivo() Dim sw As StreamWriter If File.Exists(FILE_NAME) Then 'sobreescribir el texto (no aadir al final) sw = New StreamWriter(FILE_NAME, False) Else 'crear un archivo vaco sw = File.CreateText(FILE_NAME) End If Dim i As Integer For i = 0 To (cbUrl.Items.Count - 1) sw.WriteLine(cbUrl.Items(i)) Next sw.Close() End Sub Aadir el texto de la barra de direcciones al ComboBox Las distintas URL que van mostrndose en la barra de direcciones se van aadiendo al ComboBox slo si no estn ya includas en l; la direccin "about:blank" tampoco se aade a la lista: Dim n As Integer n = cbUrl.FindString(cbUrl.Text) If (n = -1) And Not wbHtml.Document.Url.ToString.Equals("about:blank") Then cbUrl.Items.Add(cbUrl.Text) End If

Mtodo Navegar() Se crea un mtodo Navegar que comprueba que la barra de direcciones no est en blanco o contiene el texto "about:blank" y usa el mtodo WebBrowser.Navigate para cargar el documento existente en la URL especificada, reemplazando al documento actual: Private Sub Navegar(ByVal cadenaUrl As String) 'comprobaciones sobre la cadena de URL If String.IsNullOrEmpty(cadenaUrl) Then Return If cadenaUrl.Equals("about:blank") Then Return If Not cadenaUrl.StartsWith("http://") And Not cadenaUrl.StartsWith("https://") Then cadenaUrl = "http://" & cadenaUrl End If Try 'ir a la URL especificada wbHtml.Navigate(New Uri(cadenaUrl)) Catch pollo As System.UriFormatException Return End Try End Sub De manera que para ir a una URL determinada slo que hay que llamar a ese mtodo, pasando como parmetro el texto del ComboBox o una cadena con una URL vlida: Navegar("http://www.ucv.edu.pe/portal/home.aspx") Mtodos de navegacin Para ir a la pgina anterior: GoBack Para ir a la pgina siguiente: GoForward Para ir a la pgina de inicio: GoHome Para detener la carga de la pgina: Stop Para volver a cargar la pgina. Refresh Para saber si se puede ir a pgina anterior o siguiente: CanGoBack y CanGoForward Para obtener el texto de la barra de estado: StatusText Para obtener el ttulo del documento: DocumentTitle.ToString

Trabajando con Estilos en Sitios Web


Por CssClass
Otra forma de aplicar estilos a un control Web es mediante la propiedad CssClass, a esta propiedad le asiganaremos el nombre de clase que define al estilo que se desea aplicar sobre el control WEB correspondiente Ejemplo de estilos CssClass <%@ Page Language="VB" %> <html> <head> <style> .spanstyle { font: 12pt verdana; font-weight:700; color:orange; } .buttonstyle { font: 8pt verdana; background-color:lightgreen; border-color:black; width:100 } .inputstyle { font: 14pt verdana; background-color:yellow; border-style:dashed; border-color:red; width:300; } .selectstyle { font: 14pt verdana; background-color:lightblue; color:purple; } .radiostyle { width:50; background-color:red; zoom:200% } </style> </head> <body> <h3><font face="verdana">Applying Styles to HTML Controls</font></h3> <p><font face="verdana"><h4>Styled Span</h4></font><p> <span class="spanstyle" runat="server"> Este es el texto dentro de un estilo de control span </span> <p><font face="verdana"><h4>Styled Button</h4></font><p> <button class="buttonstyle" runat="server">Click me!</button> <p><font face="verdana"><h4>Styled Text Input</h4></font><p> Introducce el Texto: <p> <input type="text" value="One, Two, Three" class="inputstyle" runat="server"/> <p><font face="verdana"><h4>Styled Select Input</h4></font><p> Seleccione un Item: <p> <select class="selectstyle" runat="server"> <option>Item 1</option>

<option>Item 2</option> <option>Item 3</option> </select> <p><font face="verdana"><h4>Styled Radio Buttons</h4></font><p> Seleccione una Opcion: <span style="font: 16 pt verdana;font-weight:300"> <input type="radio" name="Mode" checked class="radiostyle" runat="server"/>Option 1<br> <input type="radio" name="Mode" class="radiostyle" runat="server"/>Option 2<br> <input type="radio" name="Mode" class="radiostyle" runat="server"/>Option 3 </span> </body> </html>

Estilos Style
Mediante la propiedad Styl, que es una coleecion que nos permite asignar valores a las distintas propiedades del estilo del control. En este caso no se realiza ningun tipo de comprobacion para indicar si la propiedad existe o no, unicamente se va aadiendo al control para luego mostrarse en el codigo HTML como parte de la propiedad Style del elemento HTML correspondiente Ejemplo de estilos Style <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Pgina de Estilos - Style</title> <script language="vbscript" runat="server"> Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) etiqueta.Style("font-size") = "14pt" etiqueta.Style("font-family") = "Comic Sans Ms" etiqueta.Style("background-color") = "pink" etiqueta.Style("color") = "red" etiqueta.Style("border-style") = "Dotted" etiqueta.Style("border-color") = "blue" End Sub </script> </head> <body> <form id="form1" runat="server"> <asp:Label runat="server" ID="etiqueta">Aplicando Estilos Tipo STYLE</asp:Label> </form> </body> </html>

Navegacin entre Pginas


Navegacin con el Control HiperLink
Esta tcnica permite navegar hasta otra pgina HTML, ASP ASPX. Este control no proporciona ningn evento del lado del servidor. La navegacin se realiza inmediatamente cuando el usuario genera el evento clic, del lado del cliente, en el control. La direccin de destino se especifica en la propiedad NavigateURL del control. Si se quiere interceptar un evento clic desde el servidor para controlar la navegacin desde cdigo, se puede utilizar un control de servidor Button, LinkButton ImageButton ms el objeto Response.

Mtodo Response.Redirect
Permite navegar hasta otra pgina, pero por cdigo. Es equivalente a la navegacin con el control HiperLink. Para utilizar este mtodo, simplemente introduce el siguiente cdigo en el evento click de un control de servidor Button: Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click Response.Redirect("PaginaDestino.aspx") End Sub Observacin: El mtodo sobrecargado Redirect(URL , Boolean) tiene un parmetro boolean que especifica si se termina la ejecucin de la pgina actual. Si se especifica True o si se utiliza el mtodo Redirect especificando solamente la URL de destino, se producir una excepcin del tipo ThreadAbortException, que indica el trmino de la ejecucin de la pgina que origina la navegacin. Se debe considerar este comentario cuando se tiene sentencias Redirect dentro de bloques Try, ya que la excepcin producida por el mtodo Redirect puede no ser esperada en el flujo de la aplicacin.

Utilizando el mtodo Server.Transfer


El mtodo Server.Transfer slo sirve para navegar entre pginas ASPX. Este mtodo termina la ejecucin del Web Form que origina la llamada y navega hasta la pgina ASPX de destino. Si consideramos el comentario anterior, la utilizacin de este mtodo siempre va a generar una excepcin del tipo ThreadAbortException, puesto que termina la ejecucin de la pgina de origen. La sintaxis es la misma que para el mtodo Redirect: Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click Server.Transfer("NuevaPagina.aspx") End Sub

La versin sobrecargada de este mtodo incorpora un valor booleano para especificar si se conservan las colecciones QueryString y Form luego del trmino de la ejecucin de la pgina actual. Esto permite que podamos acceder a los valores del ViewState de la pgina de origen desde la pgina de destino. Observa el siguiente ejemplo: 'PaginaOrigen.aspx Private Sub ImageButton1_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImageButton1.Click Server.Transfer("PaginaDestino.aspx", True) End Sub 'PaginaDestino.aspx Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim pCollectionForm As System.Collections.Specialized.NameValueCollection pCollectionForm = Request.Form Label1.Text = pCollectionForm.Item("TextBox1") End Sub Observacin: Debe introducirse la directiva EnableViewStateMac=false en la pgina de origen para deshabilitar el hashing del ViewState, de lo contrario se producir una excepcin. La pgina de origen contiene un control de servidor TextBox llamado Textbox1.

Utilizando el mtodo Server.Execute El mtodo Server.Execute slo funciona para navegar entre pginas ASPX. La ejecucin de la pgina de destino comienza sin detener la ejecucin de la pgina que origin la navegacin. Este mtodo permite desplegar el contenido de la pgina de destino en una seccin de la pgina de origen. En el ejemplo que se muestra a continuacin puede observar el uso de esta tcnica utilizando el mtodo sobrecargado Server.Execute(String, TextWriter); ste muestra el contenido de la pgina de destino en un control Literal de la pgina de origen. Private Sub BtnServerEx_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnServerEx.Click Dim pContenidoPaginaDestino As New System.IO.StringWriter Server.Execute("PaginaTres.aspx", pContenidoPaginaDestino) Literal1.Text = pContenidoPaginaDestino.ToString End Sub Observacin: Al igual que cuando se utiliza Server.Transfer y se mantienen los datos del estado de la pgina de origen, es necesario incorporar la directiva de pgina EnableViewStateMac=false para deshabilitar el hashing del ViewState. Utilizando el mtodo de script del lado del cliente Window.Open Esta tcnica permite navegar a pginas HTML ASPX. Como se trata de un script del lado del cliente, a travs de este mtodo es posible controlar el aspecto y otras caractersticas propias de la ventana de Internet Explorer, como por ejemplo el abrir el contenido en una nueva ventana o en una ventana tipo popup. Desde los objetos del lado del servidor no es posible controlar estas caractersticas ya que este objeto de Internet Explorer slo existe en el lado del cliente (DOM). Hay varios mtodos para llamar a un script del lado del cliente desde cdigo del lado del servidor. En esta ocasin abordaremos un mtodo para agregar cdigo de cliente en la pgina HTML utilizando RegisterStartupScript. Este mtodo agrega secuencias de comandos al final de la pgina HTML. Otra tcnica (la cual no veremos en este artculo) consiste en establecer el valor del atributo onclick de un control HTML desde cdigo del servidor: Control.Attributes.Add (onclick, javascript:AbrePagina('PaginaDestino.aspx)), para agregar el nombre de una funcin, en el ejemplo AbrePagina, del lado del cliente definida en un bloque script.

Ejemplo utilizando RegisterStartupScript Agregaremos el script del cliente en el evento click de un control asp Button. Lo que har el cdigo es agregar el script al final de la pgina de origen, lo que har que este se ejecute como si siempre hubiese estado all. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pClientScript As String pClientScript = "<script language=vbScript> " pClientScript += " window.open " & Chr(34) & _ "PaginaTres.aspx" & Chr(34) & _ "," & Chr(34) & "_blank" & Chr(34) & "," & Chr(34) & "width=510,height=360,left=200,top=250" & Chr(34) pClientScript += " </script>" RegisterStartupScript("PaginaDestino", pClientScript) End Sub El ejemplo anterior genera el siguiente cdigo en la pgina HTML, antes de la etiqueta </form>: < script language =vbScript> window.open "PaginaTres.aspx","_blank","width=510,height=360,left=200,top=250" </ script > Como puedes ver, existen diferentes maneras de navegar entre formularios Web. El usar una u otra tcnica depender del escenario que estemos enfrentando. Por ejemplo, si nuestro requerimiento involucra manejar las caractersticas de la ventana a la que estamos navegando, necesariamente tendremos que utilizar una tcnica que considere cdigo del lado del cliente. Estas tcnicas podrn siempre complementarse con otras alternativas que pueden dar un aspecto ms profesional a nuestros desarrollos y que dependen del ingenio del desarrollador. Por ejemplo, podramos implementar un mtodo de navegacin con controles de usuario (.ASCX) ms el mtodo Response.Redirect. Con esta tcnica, se tiene una sola pgina donde se van cargando los distintos formularios (controles .ASCX) en un control PlaceHolder dependiendo por ejemplo de una parmetro que se pase en la llamada: Response.Redirect(defaultaspx?PAGINA=Principal). Si bien en la mayora de los casos se podr resolver la navegacin con Response.Redirect o con Window.Open, es recomendable estudiar y practicar con las tcnicas antes descritas, ya que en ciertas situaciones nos ayudarn a resolver nuestro problema de manera ms eficiente. Yo te recomiendo con variables de Sesion Session.Add("usuario", TxtUsuario.Text) Y luego la recuperas en el nuevo webform con Dim nombre As String = Session.Item("usuario") Usuario es el nombre que le quieras dar a tu/s variable/s de sesin

MASTER PAGE
La caracterstica de las "Master Pages" nos proporciona la habilidad de definir una estructura y unos elementos de interfaz comunes para nuestro sitio, tales como la cabecera de pgina o la barra de navegacin, en una ubicacin comn denominada "master page", para ser compartidos por varias pginas del sitio. Una Master Page es una pgina que contiene marcas y controles que deben ser compartidas a travs de pginas mltiples de nuestro sitio. Las pginas master en ASP.NET 2.0 sirven como plantillas. Las pginas que utilizen pginas master slo podran editar ciertas regiones. Crear la pgina mster, por ejemplo, 'WebActivation.master'. Esta pgina tiene de especial que tiene una directiva de este tipo, en vez del clsico @Page. Las regiones que se puede modificar estarn dentro de los controles asp:contentplaceholder, as que hay que aadir tantos asp:contentplaceholders como distintas regiones editables a la pgina Master. Crear una pgina normal, por ejemplo, 'Default.aspx' Aadir en la directiva @Page de la pgina creada el atributo MasterPageFile cuyo valor ser el path a la pgina Master. Por ejemplo: MasterPageFile="~/WebActivation.master" Borrar el resto de cdito HTML de la pgina. Para poder editar las regiones editables de la pgina master habr que aadir controles asp:Content indicando en el atributo ContentPlaceHolderID el identificador de un asp:contentplaceholder que exista en la pgina master. Aadir el contenido dentro del control asp:Content. La definicin de una Master Page es como la de cualquir pgina. Las Master Pages pueden contener marcar, controles, cdigo o cualquier combinacin de estos elementos. Sin embargo, una Master Page puede contener un tipo especial de control llamado ContentPlaceHolder. Un ContentPlaceHolder define una regin de la representacin de la master page que puede substituirse por el contenido de una pgina asociada a la maestra. Un ContentPaceHolder tambin puede contener contenido por defecto, por si la pgina derivada no necesita sobreescribir este contenido. La sintaxis de un control ContentPlaceHolder es como sigue: <%-- ContentPlaceHolder control --%> <asp:contentplaceholder id="FlowerText" runat="server"/> <%-- ContentPlaceHolder with default content --%> <asp:contentplaceholder id="FlowerText" runat="server"> <h3>Welcome to my florist website!</h3> </asp:contentplaceholder>

Para diferenciar una Master Page de una pgina normal, la Master Page se guarda con una extensin .master. Una pgina puede derivar de una Master Page simplemente con definir un atributo MasterPageFile en su directiva Page, de la forma vista arriba. Una pgina que se asocia a una Master Page se llama Content Page (Pgina de Contenido) <%@ Page MasterPageFile="Site.master" % Una Content Page puede declarar controles Content que sobreescriban especficamente el contenido de las secciones marcadas en la Master Page. Un control Content se asocia a un control ContentPlaceHolder particular a travs de la propiedad ContentPlaceHolderID. Una Content Page debe contener marcas y controles slo dentro de los controles Content; no puede tener ningn contenido de alto nivel por si misma. Puede, sin embargo, tener directivas o cdigo del lado del servidor. <%@ Page MasterPageFile="Site.master" %> <asp:content id="Content1" contentplaceholderid="FlowerText" runat="server"> With sunshine, water, and careful tending, roses will bloom several times in a season. </asp:content> <asp:content id="Content2" contentplaceholderid="FlowerPicture" runat="server"> <asp:Image id="image1" imageurl="~/images/rose.jpg" runat="server"/> </asp:content> El siguiente ejemplo muestra la relacin entre las Master Pages y las Content Pages. La Master Page define, en este caso, dos regiones ContentPlaceHolder llamadas FlowerPicture y FlowerText, con algo de contenido por defecto para dichas regiones. Las pginas individuales de contenido del sitio heredan el diseo comn de sitio y el "ambiente" de la Master Page, pero sobreescriben el contenido por defecto de las regiones ContentPlaceHolder con su propio contenido. Observad que la pgina Default.aspx del sitio no define ningn control Content, de forma que heredo el contenido por defecto de la Master Page.

Site.master <%@ master language="VB" %> <html> <head> <link rel="stylesheet" href="StyleSheet.css" type="text/css" /> </head> <body> <form id="Form1" runat="server"> <div> <table class="main" cellspacing="0" cellpadding="2"> <tr class="header"> <td colspan="2" class="header"/> </tr> <tr valign="top"> <td class="sidebar" rowspan="2"> <a href="daffodil.aspx">Daffodil</a><br/> <a href="rose.aspx">Rose</a><br/> <a href="dahlia.aspx">Dahlia</a><br/> <a href="hydrangea.aspx">Hydrangea</a><br/> <a href="daisy.aspx">Daisy</a><br /> </td> <td class="body"> <asp:contentplaceholder id="FlowerText" runat="server"> <h3>Bienvenidos al WEB Site de Los Floristas</h3> Prueba de Manejo de Master Page </asp:contentplaceholder> <br /><br /> <asp:contentplaceholder id="FlowerPicture" runat="server"> <img alt="water lilies" src="./Images/waterlilies.jpg"/> </asp:contentplaceholder> <br /><br /> <asp:adrotator id="MyAdRotator" advertisementfile="Ads.xml" runat="server"/></td> </tr> <tr> <td class="footer"> <asp:label id="Footer" font-italic="true" text="Copyright Microsoft 2003" runat="server" /></td> </tr> </table> </div> </form> </body> </html> Default.aspx <%@ page language="VB" masterpagefile="./Site.master" %> Rose.aspx <%@ page language="VB" masterpagefile="./Site.master" %> <asp:content id="Content1" contentplaceholderid="FlowerText" runat="server"> With sunshine, water, and careful tending, roses will bloom several times in a season. </asp:content> <asp:content id="Content2" contentplaceholderid="FlowerPicture" runat="server"> <img alt="rose" src="images/rose.jpg" /> </asp:content>

Validando Informacin en una Pgina Web Utilizando Controles


Un aspecto importante de la creacin de pginas Web es la consistencia en la entrada de datos por el usuario que permite comprobar que la informacin que introducen los usuarios es vlida. Este grupo de controles nos permite validar la entrada dada por el usuario a travs de los controles de un WebForm, esta validacin se puede realizar en el cliente y en el servidor. ASP.NET ofrece un conjunto de controles de validacin que proporciona una forma eficaz y fcil de usar para comprobar errores y, si es necesario, mostrar mensajes al usuario. En los temas de esta seccin se describen los controles de validacin y cmo utilizarlos. Tenemos 6 controles de Validacin importante: Tipo de validacin Entrada requerida Comparacin con un valor Nombre del control RequiredFieldValidator CompareValidator Descripcin Garantiza que el usuario no omite una entrada. Compara los datos proporcionados por el usuario con un valor constante, con el valor de otro control (mediante un operador de comparacin como menor que, igual que o mayor que) o para un tipo de datos especfico. Comprueba que una entrada de usuario est entre los lmites superior e inferior especificados. Se pueden comprobar los intervalos entre pares de nmeros, caracteres alfabticos y fechas Comprueba que la entrada del usuario coincide con un modelo definido por una expresin regular. Este tipo de validacin permite comprobar secuencias de caracteres predecibles, como los que aparecen en las direcciones de correo electrnico, nmeros de telfono, cdigos postales, etc. Comprueba la entrada de usuario utilizando la validacin lgica que ha escrito. Este tipo de validacin permite comprobar valores derivados en tiempo de ejecucin Muchos no consideran un control de validacin a este, se encarga de poder agrupar todos los controles de validacin , y los presenta en forma de lista

Comprobacin del intervalo

RangeValidator

Coincidencia de modelos

RegularExpressionValidator

Definida por el usuario

CustomValidator

Listado de Errores

ValidationSummary

Detalle de los Controles de Validacion en ASP.Net


RequiredFieldValidator : Garantiza que el usuario no omita una entrada. Este control valida que
se ha rellenado un campo con un valor, es decir valida, los campos para que sean requeridos

Propiedades Importantes ID Nombre o identificador del control a validar ControlTovalidate Nombre del control que deseamos validar ErrorMessage Propiedades que especifican el texto y ubicacin del error o errores que aparecern si el usuario omite el control En este ejemplo se estn creando 2 controles (textbox), los cuales le vamos a relacionar el control RequiredFieldValidator, para decirle que necesitan obligatoriamente el ingreso de datos. <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html > <head runat="server"> <title>Control de Validacion RequeridFieldValidator</title> </head> <body> <form id="form1" runat="server"> Ingrese Nombre : <asp:TextBox ID="nombre" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="ValNombre" runat="server" ControlToValidate="nombre" ErrorMessage="Falta Ingresar Nombre" Display="Dynamic"></asp:RequiredFieldValidator> <br /> Ingrese Apellidos :<asp:TextBox ID="apellido" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="ValApellido" runat="server" ControlToValidate="apellido" ErrorMessage="Falta Ingresar Apellido" Display="dynamic" ForeColor="red"> </asp:RequiredFieldValidator> <br /> <asp:Button ID="boton" runat="server" Text="Ingresar" /> </form> </body> </html>

CompareValidator : Este control lo utilizaremos para comparar el valor que contiene un control WEB con un valor especifico, que puede ser un valor determinado como una constante o bien un valor de otro control Web

Propiedades Importantes ID Nombre o identificador del control a validar ControlTovalidate Nombre del control que deseamos validar ErrorMessage Mensaje de Error a Mostrar ValueToCompare Se utiliza cuando deseamos comparar el valor del control Web con un valor constante, esta propiedad tendr el valor constante ControlToCompare Cuando deseamos comparar el control WEB con otro control WEB Type Indica el tipo de dato de los valores que se van a comparar, esta propiedad puede ser Currency, Date, Double, Integer y String Operator Son las siguientes: Equal(igual) GreaterThan(Mayor) GreaterThanEqual(mayor o Igual) LessThan(Menor) LessThanEqual(menor o igual) NotEqual(distinto) DataTypeCheck(Validacion Tipo) Ahora desarrollaremos un ejemplo sobre este control, el cual compararemos los valores de una edad ingresada, para que sea mayor a cero y sea de tipo entero, adems adicionaremos una validacin de un RequiredFieldValidator <head> <title>Control de Validacion CompareValidator</title> </head> <body> <form id="form1" runat="server"> Edad : <asp:TextBox ID="edad" runat="server"/> <br /> <asp:CompareValidator ID="VComparaEdad" runat="server" ControlToValidate="edad" ValueToCompare="0" Type="Integer" Operator="GreaterThan" ErrorMessage="La edad debe ser Mayor a cero" Display="dynamic" Font-Italic="true" Font-Names="Courier" Font-Size="7"> </asp:CompareValidator> <br /> <asp:CompareValidator ID="VTipoEdad" runat="server" ControlToValidate="edad" type="Integer" Operator= "DataTypeCheck" ErrorMessage = "La edad debe ser un valor Entero" Display="Dynamic" Font-Italic="true" Font-Names="Courier" Font-Size="7"> </asp:CompareValidator> <br /> <asp:RequiredFieldValidator ID="ValEdad" runat="server" ControlToValidate="edad" ErrorMessage="Debe Indicar la Edad" Display="dynamic"> </asp:RequiredFieldValidator> <asp:Button ID="boton" runat="server" text="Valida" /> </form> </body> </html>

RangeValidator : Este control se utilizara cuando deseamos comprobar si un valor de entrada de


un control Web se encuentra comprendido en un rango determinado

Propiedades Importantes ID Nombre o identificador del control a validar ControlTovalidate Nombre del control que deseamos validar ErrorMessage Mensaje de Error a Mostrar MinimunControl Esta propiedad define el valor mnimo del rango permitido para el control MaximunControl Esta propiedad define el valor mximo del rango permitido para el control Type Indica el tipo de dato que se utiliza para comparar los valores dentro de un rango especificado, esta propiedad puede tener los siguientes valores Currency, date, Double, Integer y String. Este ejemplo permite el ingreso del valor de una nota, la cual debe encontrarse en el rango de 1 a 20, utilizaremos el control RangeValidator <%@ Page Language="VB" AutoEventWireup="false" CodeFile="default.aspx.vb" Inherits="default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Validacion RangeValidator</title> </head> <body> <form id="form1" runat="server"> Ingresa Nota<1- 20> :<asp:TextBox ID="valor" runat="server"></asp:TextBox> <br /> <asp:RangeValidator ID="ValRango" runat="server" ControlToValidate="valor" ErrorMessage="Debe Indicar valor entre 1 - 20" Display="dynamic" MinimumValue="1" MaximumValue="20" Type="integer"></asp:RangeValidator> <br /> <asp:Button ID="boton" runat="server" Text="Ingresar" /> </form> </body> </html>

RegularExpressionValidator : comprueba si el valor de un control de entrada coincide con el


modelo definido por una expresin regular, este tipo de validacin permite comprobar secuencias de caracteres previsibles mediante un formato seleccionado, como las de las direcciones de correo electrnico, los nmeros de telfono y los cdigos postales, etc.

Asp.Net nos provee de formatos pre establecidos para la validacin de la informacin ingresada, tal como se aprecia en la figura:

Propiedades Importantes ID ControlTovalidate ErrorMessage ValidationExpression

Nombre o identificador del control a validar Nombre del control que deseamos validar Mensaje de Error a Mostrar Formato que va a permitir generar la validacin, segn como lo hemos definidos Este ejemplo permite validar que un nmero de DNI sea de 8 dgitos <html><head > <title>Control RegularExpression</title></head> <body> <form id="form1" runat="server"> Nro DNI :<asp:TextBox ID="valor" runat="server"></asp:TextBox> <br /> <asp:RegularExpressionValidator ID="ValExpresion" runat="server" ControlToValidate="valor" ErrorMessage="El DNI es de 8 digitos" Display="dynamic" ValidationExpression="[0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9]"> </asp:RegularExpressionValidator> <br /> <asp:Button ID="boton" runat="server" Text="Validar" /> </form> </body> </html>

Otro Ejemplo de Expresiones Regulares Realicemos el siguiente Ejemplo:

Su Cdigo es el Siguiente <html> <head> </head> <body> <h3><font face="Verdana">Ejemplos de expresiones regulares</font></h3> <p> <form runat="server"> <table cellpadding=10> <tr valign="top"> <td colspan=3> <asp:Label ID="lblOutput" Text="Escribir valores para cada campo" Font-Name="Verdana" Font-Size="10pt" runat="server" /> </td> </tr> <tr> <td align=right> <font face=Verdana size=2>Correo electrnico:</font> </td> <td> <ASP:TextBox id=TextBox1 runat=server /> </td> <td> <asp:RequiredFieldValidator id="RqFVal" runat="server" Font-Size="10pt" ControlToValidate="TextBox1" Display="Dynamic" Font-Name="Verdana"> * </asp:RequiredFieldValidator> <asp:RegularExpressionValidator id="RegExpressionValidator1" runat="server" ControlToValidate="TextBox1" ValidationExpression="^[\w-]+@[\w-]+\.(com|net|org|edu|mil)$" Display="Static" Font-Name="verdana" Font-Size="10pt"> Email Incorrecto </asp:RegularExpressionValidator> </td> </tr> <tr><td align=right> <font face=Verdana size=2>Telfono:</font> </td> <td> <ASP:TextBox id=TextBox2 runat=server /> </td> <td> <asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server" Font-Size="10pt" ControlToValidate="TextBox2" Display="Dynamic" Font-Name="Verdana" > * </asp:RequiredFieldValidator> <asp:RegularExpressionValidator id="RegExpressValidator2" ControlToValidate="TextBox2" ValidationExpression="(^x\s*[0-9]{5}$)|(^(\([1-9][0-9]{2}\)\s)?[1-9][0-9]{2}-[0-9]{4}(\sx\s*[0-9]{5})?$)" Display="Static" Font-Name="verdana" Font-Size="10pt" runat=server> Debe tener el siguiente formato: (###)###-#### </asp:RegularExpressionValidator> </td> </tr> <tr><td align=right> <font face=Verdana size=2>Cdigo postal:</font> </td> <td> <ASP:TextBox id=TextBox3 runat=server /> </td> <td> <asp:RequiredFieldValidator id="ReqFieldVal3" runat="server" Font-Size="10pt" ControlToValidate="TextBox3" Display="Dynamic" Font-Name="Verdana"> * </asp:RequiredFieldValidator> <asp:RegularExpressionValidator id="RegrExpVal" ControlToValidate="TextBox3" ValidationExpression="^\d{5}$" Display="Static" Width="100%" Font-Name="verdana" Font-Size="10pt" runat=server> El cdigo postal debe tener 5 dgitos numricos </asp:RegularExpressionValidator> </td> </tr> <tr> <td></td> <td> <ASP:Button text="Validar" OnClick="ValidateBtn_Click" runat=server /> </td> <td></td> </tr> </table></form> </body></html>

CustomValidator : Se Utilizara para realizar Validaciones personalizadas, este control llamara a


una funcin definida por el usuario que ser la que realice la validacin. propiedades : ClientValidationFunction - indicaremos el nombre de la funcin del lado del cliente que realizara la validacin deseada, en este caso la funcin ser desarrollada en un lenguaje Script OnServerValidate - Debemos indicar el nombre de la funcin del servidor que se va a encargar de la validacin correspondiente, esta funcin se ejecutara cuando se produzca el evento ServerValidate.

Propiedades Importantes ID ControlTovalidate Value IsValid

Nombre o identificador del control a validar Nombre del control que deseamos validar Valor del control a validar en el momento de ser enviado Permite devolver un estado Verdadero o falso, segn la validacin realizada

En este ejemplo, se desea validar un numero ingresado por teclado, en el se podrn ingresar un numero el cual ser validado en forma customizada, dependiendo de la funcin con la cual se desea trabajar

Ahora veamos el cdigo que se genero: <html> <head> <script language="C#" runat=server> void ValidateBtn_OnClick(object sender, EventArgs e) { if (Page.IsValid) { lblOutput.Text = "Pgina vlida"; } else { lblOutput.Text = "Pgina no vlida :-("; } } void ServerValidate (object source, ServerValidateEventArgs value) { try { int num = Int32.Parse(value.Value); if (num%2 == 0) { value.IsValid = true; return; } } catch (Exception) {} value.IsValid = false; } </script> </head> <body> <h3><font face="Verdana">Ejemplo CustomValidator</font></h3> <p> <form runat="server"> <asp:Label id=lblOutput runat="server" Text="Escribir nmero par:" Font-Name="Verdana" Font-Size="10pt" /><br> <p> <asp:TextBox id=Text1 runat="server" /> <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ControlToValidate="Text1" ErrorMessage="Escribir un nmero" Display="Dynamic" Font-Name="verdana" Font-Size="10pt"> </asp:RequiredFieldValidator> <asp:CustomValidator id="CustomValidator1" runat="server" ControlToValidate="Text1" ClientValidationFunction="ClientValidate" OnServerValidate="ServerValidate" Display="Static" Font-Name="verdana" Font-Size="10pt"> No es un nmero par </asp:CustomValidator> <p> <asp:Button text="Validar" onclick="ValidateBtn_OnClick" runat="server" /> <script language="javascript"> function ClientValidate(source, arguments) { if (arguments.Value%2 == 0) arguments.IsValid = true; else arguments.IsValid = false; } </script> </form> </body> </html>

ValidationSummary : Este control difiere del resto, ya que en realidad no va a realizar un tipo de
validacin determinada, sino que contiene todos los mensajes de error que se han producido y muestra una lista de ellos en la pagina(los cuales hallan fallado)

Propiedades Importantes: ID Nombre o identificador del control a validar HeaderText Contendr el texto que va a mostrarse como cabecera a modo de descripcin de errores ShowSummary que puede tener los valores true o false, Indicara si deseamos mostrar o no el resumen de validacin de la pagina DisplayMode La forma en la que se va a mostrar las distintas descripciones de cada uno de los errores de validacin encontrados en la pagina, pueden ser : BulletList(una lista con puntos), List(una LIsta) y SingleParagraph(un nico prrafo)

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default13.aspx.vb" Inherits="Default13" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Control de Validacion Validation Summary</title> </head> <body> <form id="formulario" runat="server" method="post"> <h3>Validacion de Controles </h3> Valor Uno : <asp:TextBox ID="ValUno" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="ValidaUno" runat="server" ControlToValidate="ValUno" ErrorMessage="Debe Indicar el Valor UNO" Display="Dynamic"> * </asp:RequiredFieldValidator> <br /> Valor Dos : <asp:TextBox ID="ValDos" runat="server"></asp:TextBox> <asp:CompareValidator ID="ValidaDos" runat="server" ControlToValidate="ValDos" Operator="GreaterThan" ValueToCompare="10" ErrorMessage="El Valor 2 debe ser mayor a 10" Display="Dynamic" Type="Integer"> * </asp:CompareValidator> <br /><br /> <asp:Button ID="boton" runat="server" Text="Enviar Datos" /><br /> <asp:ValidationSummary ID="resumen" runat="server" HeaderText="Se han cometido los siguientes errores en la Pagina" ShowSummary="true" DisplayMode="BulletList" /> </form> </body> </html>

Ejemplo de Controles de Validacin


Hemos desarrollado los ejemplos de control de validacin a travs del ambiente Source, ahora desarrollamos un ejemplo en forma grafica. Para la creacin de estos controles primero necesitamos crear una tabla HTML, el cual debe ser escrito a nivel HTML, de la siguiente forma:

Ahora dentro de la tabla HTML anteriormente creada, disearemos el siguiente formulario

Definicin de los nombres de los controles, estos deben cambiarse dentro de la propiedad ID del control seleccionado:

txtApellido s txtEdad txtEmail txtFecNac

Dentro de estos se debe crear lo siguientes controles de RequiredFieldValidator, con los nombres reqNombres, reqApellidos, remedad, reqEmail, reqFecNac como se muestra en la siguiente grafica:

Configurando los controles de validacin: reqNombres: ID = reqNombres ErrorMesage = Debe escribir su nombre Text =* ControlValidate = txtNombre Completar lo mismo para los dems controles, con descripciones que correspondan. Nuevamente sobre los controles de validacin para la Edad colocamos un RangeValidator con el nombre reqValidaEdad reqValidadEdad: ID = reqValidadEdad ErrorMesage = Su edad no es permitida Text =* MaximumValue = 45 MinimumValue = 18 ControlValidate = txtEdad Luego agregamos un RegularExpressionValidator al lado del campo Email con las siguientes propiedades: reqValidadEmail: ID = reqValidadEmail ErrorMesage = Su correo no es correcto Text =* ControlValidate = txtEmail ValidationExpression =

Finalmente colocamos al costado del campo Email, el control CustomValidator, reqValidadEmailPers: ID = reqValidadEmailPers ErrorMesage = Su correo no es valido Text =* ControlValidate = txtEmail VI.- Finalmente colocamos en control ValidationSummary en la parte final con las siguientes propiedades: reqErrores ID= reqErrores HeaderText = Errores Encontrados BorderWith = 1 BorderOutset = OutSet Al final este diseo quedara como sigue:

Dar doble clic sobre el control CustomValidator el cual se mostrara lo siguiente:

Dentro de la funcin reqValidadEmailPers_ServerValidate escribimos lo siguiente:

Ahora debemos crear uno para validar el cdigo postal, con la condicin de que el formato del cdigo postal sea el siguiente: ##*###*##*## (Pas) * (Provincia) * (Ciudad) * (Local)

ADO.NET en ASP.NET
Cuando nosotros empezamos a trabajar con BD, lo primero que debemos conocer son NameSpace que te permiten trabajar con todos los mtodos de manejo de base de datos, los cuales son los siguientes:
NameSpace Descripcin del NameSpace

System.Data

Espacio de nombres principal de ADO.NET. En este espacio de nombres puedes encontrar las clases utilizadas por todos los proveedores que existen. Estas clases se encargan de las principales representaciones de datos, como tablas, columnas y filas. Destacando la clase DataSet que explicaremos detenidamente ms adelante. Este espacio de nombres define las clases comunes utilizadas como base por las clases de los proveedores de datos. Define las clases para trabajar con fuentes de datos OLE-DB que utilizan los proveedores OleDb. Contiene las clases para trabajar con fuentes de datos ODBC que utilizan .NET OCBC como proveedores de datos. Este espacio de nombres define un las clases de datos para trabajar con SQL Server, desde la versin 7.0 en adelante. En este espacio de nombres encontramos las clases necesarias para gestionar los tipos de datos especficos de SQL Server.

System.Data.Common System.Data.OleDb System.Data.Odbc System.Data.SqlClient System.Data.SqlTypes

Ahora veremos los objetos con los cuales trabaja ADO en ASP, son los siguientes: XXXConnection - Este comando es el que permite generar la conexin a la base de datos, donde los 3 primeros caracteres indican el nombre del proveedor (sql, oledb, etc.), tiene los siguientes parmetros: Parametro Data Source Initial Catalog Integrated Security Password Provider User ID Descripcion de los Parametros Recibe el nombre del servidor SQL Server utilizado en la conexin, o en caso de utilizar bases de datos de usuario Access el nombre del archivo utilizado. Nombre de la base de datos con la que vamos a trabajar. Configura nuestra conexin de un modo seguro o no. Recibe como valores True, False y SSPI, siendo True y SSPI el mismo modo de seguridad. Contrasea para la identificacin de inicio se sesin en SQL Server. Utilizada nicamente para conexiones OleDbConnection, establece o devuelve el nombre del proveedor. Nombre de usuario para el inicio de sesin en SQL Server 2005, login.

Ejemplo: Dim cad as string = Data Source=.;Initial Catalog=Northwind;Integrated Security=trae; Dim xcon as new sqlconnection (cad)

XXXCommand Contiene las instrucciones en SQL necesarias para realizar tareas de recuperacin y de modificacin. Donde los 3 primeros caracteres indican el nombre del proveedor (sql, oledb, etc.), Las principales propiedades del objeto Command son: Propiedad Connection Descripcin de la Propiedad Objeto Connection necesario para conectar con la fuente de datos Indica de que tipo es el comando que va a ejecutar. Podemos elegir entre los siguientes tipos: Text: Indica que la sentencia SQL que debe ejecutar este comando se le pasar en modo texto en forma de cadena. Este tipo es con el que aparece configurado por defecto el objeto Command, por lo que no es necesario indicar esta propiedad explcitamente. StoredProcedure: El comando se ejecutara mediante un procedimiento almacenado en una base de datos. Ms adelante veremos como trabajar con procedimientos almacenados. Table: Recibe el nombre de la tabla. En caso de haber seleccionado el tipo de comando Text (o haberlo dejado por defecto), recibe la sentencia SQL a ejectuar. Tiempo de espera para ejecutar un comando. Para el proveedor Oracle no est disponible. Los parmetros son lo valores que se sustituirn en las instrucciones SQL, ms adelante veremos como trabajar con Parmetros, ya que es el modo de trabajo ms recomendable, por seguridad (como veremos en la unidad dedicada a la seguridad) y por rendimiento.

CommandType

CommandText CommandTimeOut

Parameters

XXXDataAdapter Es el objeto "puente" encargado de enlazar un DataSet con una fuente de datos. Un objeto DataAdapter es el encargado de dos principales funciones: 1 - Recuperar datos de una base de datos y poblar un objeto DataSet. 2- Recuperar datos y cambios realizados con ellos en un DataSet para devolverlos o actualizarlos en la base de datos. El objeto DataAdapter trabaja en dos sentidos, de la base de datos hacia el objeto DataSet para recuperar informacin, y al contrario, del DataSet a la fuente de datos para actualizar los cambios producidos en el DataSet sobre la base de datos. Este conjunto de objetos que forman el objeto DataAdapter requiere de los siguientes objetos: Objeto Connection: para conectar con la fuente de datos. Objeto Command: instrucciones necesarias para la recuperacin de datos de las bases de datos y la actualizacin de informacin en las mismas. En esta figura puedes ver las cuatros propiedades que tiene el objeto DataAdapter y que iremos explicando a continuacin:

DataSetEs una Base de Datos Virtual. Es un objeto que nos permite trabajar con fuentes de datos y almacenar mltiples tablas. Estas tablas se representan mediante el objeto DataTable. Por lo cual un objeto DataSet puede trabajar con varias DataTable de modo que pueden existir relaciones entre las DataTable para la recuperacin de datos de mltiples tablas.

DataReader. Tiene las caractersticas de un RecordSet de Visual Basic 6.0. Es un objeto mucho ms sencillo que un DataSet, su nica funcin es el acceso a una base de datos para realizar consultas de slo lectura. stas consultas slo pueden realizarse hacia delante, es decir, no podremos retroceder para obtener datos anteriores, una vez realizada una consulta en una fila, las anteriores resultan inaccesibles.

Controles de Acceso a Datos Repeater - Muestra elementos de datos de una lista, no genera una salida visible por si solo, debe utilizar plantillas. El control Repeater es un control contenedor enlazado a datos que genera una lista de elementos individuales. El diseo de los elementos individuales de una pgina web se define mediante plantillas. Cuando se ejecuta la pgina, el control repite el diseo para cada uno de los elementos del origen de datos DataList - Similar al anterior pero permite una mayor personalizacin, a la hora de mostrar informacin permite seleccionar y editar de elementos. Resulta til para mostrar datos que se encuentran en una estructura que se repite, como una tabla. El control DataList puede mostrar los datos con diferentes diseos, como por ejemplo, ordenados en columnas o filas. Para obtener ms informacin acerca de la programacin del control DataList. GridView - Este control muestra la informacin en forma de tabla con celdas y columnas, generando el cdigo HTML. Es el mas complejo de todos y permite realizar todos los procesos(Insert, Delete..). El GridView muestra los valores de un origen de datos en una tabla donde cada columna representa un campo y cada fila representa un registro. El control GridView permite seleccionar, ordenar y modificar estos elementos. DetailsView - El control DetailsView permite mostrar, modificar, insertar o eliminar un solo registro cada vez de su origen de datos asociado. El control DetailsView muestra solamente un nico registro de datos de cada vez, aunque su origen de datos exponga varios registros. Para obtener ms informacin acerca de la programacin del control DetailsView. FormView - El control FormView permite trabajar con un nico registro de un origen de datos de forma similar al control DetailsView. La diferencia entre los controles FormView y DetailsView radica en que el control DetailsView utiliza un diseo tabular en el que cada campo del registro se muestra como una fila independiente. En cambio, el control FormView no especifica ningn diseo predefinido para mostrar el registro. Por tanto, debe crear una plantilla que contenga controles para mostrar campos concretos del registro. La mayora de los controles que manejo acceso a datos, necesitan contar en parte de su estructura plantillas para poder mostrar la informacin. A continuacin mostramos algunas plantillas que se utilizan: 1 - HeaderTemplate - representa la primera lnea de Datos, es decir la cabecera. 2 - ItemTemplate - Representa cada lnea de datos, elemento o registro, se utiliza la sintaxis del DataBinding 3 - AlternatingItemTemplate - Se aplica a elementos alternos de la lista 4 - SeparatorItemTemplate - Separa cada uno de los elementos, es decir cada lnea de datos 5 - FooterTemplate - Es la ultima lnea de salida, es decir, el pie de los datos.

Plantillas del DataGrid y DataList 1 - SelectedItemtemplate - define el aspecto que va a tener un elemento cuando es seleccionado dentro de un control DataList o DataGrid, esta plantilla, al igual que la siguiente no esta disponible en el control repeater 2 - EditItemTemplate - permite definir el aspecto de un elemento cuando pasa a modo de edicin, es decir esta plantilla nos va a permitir los datos de un elemento determinado. 3 - RepeatLayout - Indica la distribucin que se le va a dar a los datos, es decir, a cada elemento de datos incluido en la plantilla dataItem, tiene 2 valores Table y Flow 4 - RepeatDirection - Indica los elementos q se van a mostrar en forma horizontal o vertical. Por defecto es vertical. 5 - RepeatColumns - Esta recibe un valor entero que indicara el nmero de columnas utilizadas a Mostar

Ejemplo de los Diferentes con de Datos en ASP.NET


CONTROL DATALIST

<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Control de DataList</title> </head> <body> <form id="form1" runat="server"> <div> <asp:DataList ID="DataList1" runat="server" CellPadding="4" DataKeyField="OrderID" DataSourceID="SqlDataSource1"> <ItemTemplate> OrderID: <asp:Label ID="OrderIDLabel" runat="server" Text='<%# Eval("OrderID") %>'/><br /> OrderDate: <asp:Label ID="OrderDateLabel" runat="server" Text='<%# Eval("OrderDate", "{0:d}") %>'/><br /> ShipName:<asp:Label ID="ShipNameLabel" runat="server" Text='<%# Eval("ShipName") %>'/><br /> ShipAddress: <asp:Label ID="ShipAddressLabel" runat="server" Text='<%# Eval("ShipAddress") %>'/><br /> ShipCity: <asp:Label ID="ShipCityLabel" runat="server" Text='<%# Eval("ShipCity") %>'/><br /> ShipCountry: <asp:Label ID="ShipCountryLabel" runat="server" Text='<%# Eval("ShipCountry") %>'/><br /> <br /> </ItemTemplate> </asp:DataList> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="Data Source=.;Initial Catalog=Northwind;uid=sa;pwd=dba;" SeletCommand="SELECT [OrderID], [OrderDate], [ShipName], [ShipAddress], [ShipCity], [ShipCountry] FROM [Orders]"> </asp:SqlDataSource> </div> </form> </body> </html>

CONTROL DETAILSVIEW

<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" AutoGenerateRows="False" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1" CellPadding="3" CellSpacing="2"> <Fields> <asp:BoundField DataField="EmployeeID" HeaderText="Codigo" InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" /> <asp:BoundField DataField="LastName" HeaderText="Apellido" SortExpression="LastName" /> <asp:BoundField DataField="FirstName" HeaderText="Nombre" SortExpression="FirstName" /> <asp:BoundField DataField="HomePhone" HeaderText="Telefono" SortExpression="HomePhone" /> <asp:BoundField DataField="Country" HeaderText="Pais" SortExpression="Country" /> <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" ButtonType="Button" CancelText="Cancelar" DeleteText="Eliminar" EditText="Editar" InsertText="Isertar" NewText="Nuevo" SelectText="Seleccione" UpdateText="Actualizar" /> </Fields> <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> <EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> </asp:DetailsView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="Data Source=.;Initial Catalog=Northwind;uid=sa;pwd=dba;" DeleteCommand="DELETE FROM Employees WHERE EmployeeID = @original_EmployeeID " InsertCommand="INSERT INTO [Employees] ([LastName], [FirstName], [HomePhone], [Country]) VALUES (@LastName, @FirstName, @HomePhone, @Country)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT EmployeeID, LastName, FirstName, HomePhone,Country FROM Employees" UpdateCommand="UPDATE [Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [HomePhone] = @HomePhone, [Country] = @Country WHERE [EmployeeID] = @original_EmployeeID AND [LastName] = @original_LastName AND [FirstName] = @original_FirstName AND [HomePhone] = @original_HomePhone AND [Country] = @original_Country">

<DeleteParameters> <asp:Parameter Name="original_EmployeeID" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="LastName" Type="String" /> <asp:Parameter Name="FirstName" Type="String" /> <asp:Parameter Name="HomePhone" Type="String" /> <asp:Parameter Name="Country" Type="String" /> <asp:Parameter Name="original_EmployeeID" Type="Int32" /> <asp:Parameter Name="original_LastName" Type="String" /> <asp:Parameter Name="original_FirstName" Type="String" /> <asp:Parameter Name="original_HomePhone" Type="String" /> <asp:Parameter Name="original_Country" Type="String" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="LastName" Type="String" /> <asp:Parameter Name="FirstName" Type="String" /> <asp:Parameter Name="HomePhone" Type="String" /> <asp:Parameter Name="Country" Type="String" /> </InsertParameters> </asp:SqlDataSource> </div> </form> </body> </html>

CONTROL FORMVIEW

<%@ Page language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Ejemplo Usando el Control FormView</title> </head> <body> <form id="form1" runat="server"> <h3>Ejemplo Usando el Control FormView</h3> <table cellspacing="10"> <tr> <!--AllowPaging : Permite La Paginacion--> <!--Estableciendo los Items a Mostrar--> <!--PagerTemplate: Permite Configurar la Paginacion--> <td valign="top"> <asp:FormView ID="ProductsFormView" DataSourceID="ProductsSqlDataSource" AllowPaging="True" runat="server" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2" GridLines="Both"> <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> <EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> <%-- Estableciendo los Items a Editar --%> <EditItemTemplate> <h2>Editando Datos con el Control FormView</h2> <table style="background-color:Gray; border-style:dashed"> <tr> <td align="right"><b>Producto ID:</b></td> <td><asp:TextBox Text='<%# Bind("ProductID") %>' runat="server" ID="TxtID" Enabled="false" /></td> </tr> <tr> <td align="right"><b>Product Nombre:</b></td> <td><asp:TextBox Text='<%# Bind("ProductName") %>' runat="server" ID="TxtNombre" /></td> </tr> <tr> <td align="right"><b>Category ID:</b></td> <td><asp:TextBox Text='<%# Bind("CategoryID") %>' runat="server" ID="TxtCategoria" /></td> </tr> <tr> <td align="right"><b>Quantity Per Unit:</b></td> <td><asp:TextBox Text='<%# Bind("QuantityPerUnit") %>' runat="server" ID="TxtUnidad" /></td> </tr> <tr><td align="right"><b>Unit Price:</b></td> <td><asp:TextBox Text='<%# Bind("UnitPrice") %>' runat="server" ID="TxtPrecio" /></td> </tr> </table> <asp:Button ID="Button1" runat="server" Text="Altualizar" CommandName="Update" /> <asp:Button ID="Button2" runat="server" Text="Cancelar" CommandName="Cancel" /> </EditItemTemplate> <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />

<%-- Estableciendo los Items para Adicionar --%> <InsertItemTemplate> <h2>Insertando Datos con el Control FormView</h2> <table> <tr><td align="right"><b>Product Nombre:</b></td> <td><asp:TextBox Text='<%# Bind("ProductName") %>' runat="server" ID="TxtNombre" /></td> </tr> <tr><td align="right"><b>Category ID:</b></td> <td><asp:TextBox Text='<%# Bind("CategoryID") %>' runat="server" ID="TxtCategoria" /></td> </tr> <tr><td align="right"><b>Quantity Per Unit:</b></td> <td><asp:TextBox Text='<%# Bind("QuantityPerUnit") %>' runat="server" ID="TxtUnidad" /></td> </tr> <tr><td align="right"><b>Unit Price:</b></td> <td><asp:TextBox Text='<%# Bind("UnitPrice") %>' runat="server" ID="TxtPrecio" /></td> </tr> </table> <asp:Button ID="Button1" runat="server" Text="Guardar" CommandName="Insert" /> <asp:Button ID="Button2" runat="server" Text="Cancelar" CommandName="Cancel" /> </InsertItemTemplate> <%-- Estableciendo los Items a Mostrar --%> <ItemTemplate> <h2>Listando Datos con el Control FormView</h2> <table> <tr><td align="right"><b>Product ID:</b></td> <td><asp:Label id="ProductIDLabel" runat="server" Text='<%# Eval("ProductID") %>' /></td> </tr> <tr><td align="right"><b>Product Name:</b></td> <td><asp:Label id="ProductNameLabel" runat="server" Text='<%# Eval("ProductName") %>' /></td> </tr> <tr><td align="right"><b>Category ID:</b></td> <td><asp:Label id="CategoryIDLabel" runat="server" Text='<%# Eval("CategoryID") %>' /></td> </tr> <tr><td align="right"><b>Quantity Per Unit:</b></td> <td><asp:Label id="QuantityPerUnitLabel" runat="server" Text='<%# Eval("QuantityPerUnit") %>' ></td> </tr> <tr> <td align="right"><b>Unit Price:</b></td> <td><asp:Label id="UnitPriceLabel" runat="server" Text='<%# Eval("UnitPrice") %>' /></td> </tr> </table> <asp:Button ID="Button3" runat="server" Text="Editar Datos de Producto..." CommandName="Edit" /> <asp:Button ID="Button4" runat="server" Text="Nuevo Producto" CommandName="New" /> </ItemTemplate> <%-- PagerTemplate: Permite Configurar la Paginacion --%> <PagerTemplate> <table> <tr> <td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td> <td><asp:LinkButton ID="PrevButton" CommandName="Page" CommandArgument="Prev" Text="<" RunAt="server"/></td> <td><asp:LinkButton ID="NextButton" CommandName="Page" CommandArgument="Next" Text=">" RunAt="server"/></td> <td><asp:LinkButton ID="LastButton" CommandName="Page" CommandArgument="Last" Text=">>" RunAt="server"/></td> </tr> </table> </PagerTemplate> <HeaderStyle forecolor="White" backcolor="#A55129" Font-Bold="True" /> </asp:FormView> </td> </tr> </table>

<!--Aqui va El SQLDATASOURCE para espablecer los datos a mostrar--> <asp:SqlDataSource ID="ProductsSqlDataSource" SelectCommand="SELECT * FROM [Products]" connectionstring="<%$ ConnectionStrings:NorthwindConnection %>" UpdateCommand="Update Products Set ProductName=@ProductName, CategoryID=@CategoryID, QuantityPerUnit=@QuantityPerUnit, UnitPrice=@UnitPrice Where ProductID=@ProductID" InsertCommand="Insert Into Products (ProductName,CategoryID,QuantityPerUnit,UnitPrice) Values(@ProductName,@CategoryID,@QuantityPerUnit,@UnitPrice)" RunAt="server"> </asp:SqlDataSource> </form> </body> </html>

OTROS EJEMPLOS DE CONTROLES - GRIDVIEW

<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> &nbsp; &nbsp; &nbsp; &nbsp; <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" BorderWidth="1px" CellPadding="3" DataKeyNames="CustomerID" DataSourceID="SqlDataSource1" GridLines="Horizontal"> <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> <Columns> <asp:CommandField CancelText="Cancelar" DeleteText="Eliminar" EditText="Editar" InsertText="Insertar" SelectText="Seleccionar" ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" UpdateText="Actualizar" /> <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" ReadOnly="True" SortExpression="CustomerID" /> <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" SortExpression="CompanyName" /> </Columns> <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" /> <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" /> <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> <AlternatingRowStyle BackColor="#F7F7F7" /> </asp:GridView>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>" DeleteCommand="DELETE FROM [Customers] WHERE [CustomerID] = @original_CustomerID AND [CompanyName] = @original_CompanyName" InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName]) VALUES (@CustomerID, @CompanyName)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [CustomerID], [CompanyName] FROM [Customers]" UpdateCommand="UPDATE [Customers] SET [CompanyName] = @CompanyName WHERE [CustomerID] = @original_CustomerID AND [CompanyName] = @original_CompanyName"> <DeleteParameters> <asp:Parameter Name="original_CustomerID" Type="String" /> <asp:Parameter Name="original_CompanyName" Type="String" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="CompanyName" Type="String" /> <asp:Parameter Name="original_CustomerID" Type="String" /> <asp:Parameter Name="original_CompanyName" Type="String" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="CustomerID" Type="String" /> <asp:Parameter Name="CompanyName" Type="String" /> </InsertParameters> </asp:SqlDataSource> <asp:DataList ID="DataList1" runat="server" BackColor="White" BorderWidth="1px" CellPadding="3" DataKeyField="CustomerID" DataSourceID="SqlDataSource2" > <ItemTemplate> CustomerID: <asp:Label ID="CustomerIDLabel" runat="server" Text='<%# Eval("CustomerID") %>'/><br /> ContactName: <asp:Label ID="ContactNameLabel" runat="server" Text='<%# Eval("ContactName") %>'/> <br /> Address: <asp:Label ID="AddressLabel" runat="server" Text='<%# Eval("Address") %>'/><br /> City: <asp:Label ID="CityLabel" runat="server" Text='<%# Eval("City") %>'/> Phone: <asp:Label ID="PhoneLabel" runat="server" Text='<%# Eval("Phone") %>'/><br/> <br /> </ItemTemplate> </asp:DataList><asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>" SelectCommand="SELECT CustomerID,ContactName,Address, City,Phone FROM Customers WHERE (CustomerID = @CustomerID)"> <SelectParameters> <asp:ControlParameter ControlID="GridView1" Name="CustomerID" PropertyName="SelectedValue" Type="String" /> </SelectParameters> </asp:SqlDataSource> </div> </form> </body> </html>

COMBINACION DE CONTROLES GRIDVIEW_DETAILSVIEW

<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" PageSize="5"> <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <Columns> <asp:CommandField CancelText="Cancelar" DeleteText="Eliminar" EditText="Editar" InsertText="Insertar" NewText="Nuevo" SelectText="Seleccionar" ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" UpdateText="Actualizar" /> <asp:BoundField DataField="EmployeeID" HeaderText="Cod Emple" InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" /> <asp:BoundField DataField="LastName" HeaderText="Apellido" SortExpression="LastName" /> <asp:BoundField DataField="FirstName" HeaderText="Nombre" SortExpression="FirstName" /> <asp:BoundField DataField="Title" HeaderText="Titulo" SortExpression="Title" /> <asp:BoundField DataField="Country" HeaderText="Pais" SortExpression="Country" /> </Columns> <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:NorthwindConnection%>" DeleteCommand="DELETE FROM [Employees] WHERE [EmployeeID] = @original_EmployeeID AND [LastName] = @original_LastName AND [FirstName] = @original_FirstName AND [Title] = @original_Title AND [Country] = @original_Country" InsertCommand="INSERT INTO [Employees] ([LastName], [FirstName], [Title], [Country]) VALUES (@LastName, @FirstName, @Title, @Country)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [EmployeeID], [LastName], [FirstName], [Title], [Country] FROM [Employees]" UpdateCommand="UPDATE [Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [Title] = @Title, [Country] = @Country WHERE [EmployeeID] = @original_EmployeeID AND [LastName] = @original_LastName AND [FirstName] = @original_FirstName AND [Title] = @original_Title AND [Country] = @original_Country">

<DeleteParameters> <asp:Parameter Name="original_EmployeeID" Type="Int32" /> <asp:Parameter Name="original_LastName" Type="String" /> <asp:Parameter Name="original_FirstName" Type="String" /> <asp:Parameter Name="original_Title" Type="String" /> <asp:Parameter Name="original_Country" Type="String" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="LastName" Type="String" /> <asp:Parameter Name="FirstName" Type="String" /> <asp:Parameter Name="Title" Type="String" /> <asp:Parameter Name="Country" Type="String" /> <asp:Parameter Name="original_EmployeeID" Type="Int32" /> <asp:Parameter Name="original_LastName" Type="String" /> <asp:Parameter Name="original_FirstName" Type="String" /> <asp:Parameter Name="original_Title" Type="String" /> <asp:Parameter Name="original_Country" Type="String" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="LastName" Type="String" /> <asp:Parameter Name="FirstName" Type="String" /> <asp:Parameter Name="Title" Type="String" /> <asp:Parameter Name="Country" Type="String" /> </InsertParameters> </asp:SqlDataSource> <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" CellPadding="4" DataSourceID="SqlDataSource2" ForeColor="#333333" GridLines="None" Height="50px" Width="456px"> <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <CommandRowStyle BackColor="#FFFFC0" Font-Bold="True" /> <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> <Fields> <asp:BoundField DataField="BirthDate" DataFormatString="{0:dd/MM/yyyy}" HeaderText="Fech_Nac" SortExpression="BirthDate" /> <asp:BoundField DataField="HireDate" HeaderText="Fech_Contra" SortExpression="HireDate" /> <asp:BoundField DataField="PostalCode" HeaderText="Cod_Post" SortExpression="PostalCode" /> <asp:BoundField DataField="HomePhone" HeaderText="Telefono" SortExpression="HomePhone" /> <asp:BoundField DataField="Notes" HeaderText="Nota" SortExpression="Notes" /> </Fields> <FieldHeaderStyle BackColor="#FFFF99" Font-Bold="True" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> </asp:DetailsView> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>" SelectCommand="SELECT [BirthDate], [HireDate], [PostalCode], [HomePhone], [Notes] FROM [Employees] WHERE ([EmployeeID] = @EmployeeID)"> <SelectParameters> <asp:ControlParameter ControlID="GridView1" Name="EmployeeID" PropertyName="SelectedValue" Type="Int32" /> </SelectParameters> </asp:SqlDataSource> </form> </body> </html>

<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Repeater & DropDownList</title> <style type="text/css"> body{ font-family:Arial; } .ode{ border: 2px solid green; width:250px; } table{ margin:20px; } tr,td,table{ border:1px solid #fff; } span{ font-size:0.8em; } td{ padding:5px; } b{ font-size:0.8em; color:green; } strong{ font-size:0.9em; color:green; margin-right:30px; margin-left:27px; } </style> </head> <body> <form id="form1" runat="server" > <div style="margin:auto;width:500px;"> <strong>Categoria de Productos</strong> <asp:DropDownList ID="CategoryDropDownList" runat="server" DataSourceID="CategoriaProdcutos" DataTextField="CategoryName" DataValueField="CategoryID" AutoPostBack="true" OnSelectedIndexChanged="ComboCategoria" BackColor="#C0FFC0" CssClass="ode" </asp:DropDownList>

>

<asp:SqlDataSource ID="CategoriaProdcutos" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>" SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]"> </asp:SqlDataSource> <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"> <HeaderTemplate> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td><b>ProductID</b></td> <td><b>ProductName</b></td> <td><b>QuantityPerUnit</b></td> <td><b>UnitPrice</b></td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td bgcolor="#ccffcc"> <asp:Label runat="server" ID="Label1" Text='<%# Eval("ProductID") %>'></asp:Label> </td> <td bgcolor="#ccffcc"> <asp:Label runat="server" ID="Label2" text='<%# Eval("ProductName") %>' /> </td> <td bgcolor="#ccffcc"> <asp:Label runat="server" ID="Label6" text='<%# Eval("QuantityPerUnit") %>' /> </td> </td> <td bgcolor="#ccffcc"> <asp:Label runat="server" ID="Label7" text='<%# Eval("UnitPrice") %>' /> </td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr> <td > <asp:Label runat="server" ID="Label3" text='<%# Eval("ProductID") %>' /> </td> <td > <asp:Label runat="server" ID="Label4" text='<%# Eval("ProductName") %>' /> </td> <td > <asp:Label runat="server" ID="Label5" text='<%# Eval("QuantityPerUnit") %>' /> </td> <td > <asp:Label runat="server" ID="Label8" text='<%# Eval("UnitPrice") %>' /> </td> </tr> </AlternatingItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>" id="SqlDataSource1" runat="server" SelectCommand="SELECT ProductID,ProductName,QuantityPerUnit,UnitPrice FROM dbo.Products where CategoryID=@CategoriaID" > <SelectParameters> <asp:ControlParameter ControlID="CategoryDropDownList" PropertyName="SelectedValue" Name="CategoriaID" Type="Int32" DefaultValue="0" /> </SelectParameters> </asp:SqlDataSource> </div> </form> </body> </html>

Ejemplo paso a paso de ASP con SQL Server 2005


Abre el Visual Studio 2005, Crea un nuevo proyecto ASP.NET (vwdTut01), Elige el lenguaje a usar para el cdigo de forma predeterminada Aade un nuevo elemento , Elige la Creacin de una Base de datos en SQL Server y dale el nombre vwdTut01.mdf Nota Nos avisa de que la base de datos debe estar en la carpeta App_Data, acepta Crea una tabla (debes mostrar la ficha Explorador de bases de datos) Usa estos campos: - ID, int, Identidad - Correo, nvarchar(64) - Clave, nvarchar(40) - Nombre, nvarchar(50) - Fecha, datetime - Comentarios, nvarchar(300) Dale a guardar y ponle el nombre Usuarios Ahora te explico cmo crear el formulario de introduccin de datos. En el men Sitio Web selecciona Agregar nuevo elemento Selecciona WebForms y dale el nombre AgregarUsuario.aspx El lenguaje ser el indicado al principio, pero lo puedes cambiar (por ejemplo yo utilizo Visual Basic) Marca la casilla Colocar el cdigo en un archivo independiente para que se separe el diseo del formulario del cdigo que vamos a escribir. Ahora vamos a aadir una tabla, para que queden alineado los textos y las cajas de textos En el men Diseo seleccionar Insertar tabla En el cuadro de dilogo de insertar tabla, selecciona los siguientes parametros: 3 filas y 2 columnas, ancho 90%, Alinear: center, Atributos: borde: 1, Espaciado celdas: 4 En la tabla recin creada, aade una etiqueta en la primera columna, un textBox en la segunda columna Queremos que estn alineadas a la izquierda y arriba, Selecciona la celda (pulsando en la flecha que sale al pasar el ratn), En la ventana de propiedades, en align selecciona left y en VAlign selecciona top Selecciona esa fila y pulsa en Copiar de la barra de herramientas, Ahora, al pulsar en el botn Pegar y se aadir una nueva fila con los controles. Selecciona la siguiente fila (la vaca) y pulsa en pegar, Repite los pasos anteriores hasta que tengas 4 filas con los controles Aade un botn en la siguiente fila, Selecciona la fila del botn En el men Diseo selecciona Combinar celda De esa forma, esa columna ocupar toda la fila En la ltima fila, aade una etiqueta, Selecciona esa ltima fila para que ocupe las dos columnas, ya sabes: En el men Diseo, selecciona Combinar celda Selecciona esa etiqueta y en la ventana de propiedades busca la propiedad Width y escribe 100% para que ocupe todo el ancho. Cambia el texto de las 4 primeras etiquetas para que muestre: Correo, Clave, Nombre y Comentarios Como puede ser que no interese que se vea la clave escrita, selecciona la segunda caja de textos, En la ventana de propiedades, en la propiedad TextMode selecciona Password Selecciona la ltima caja de textos, te digo lo que hay que hacer para que tenga ms espacio para escribir, En la ventana de propiedades, en la propiedad TextMode selecciona Multiline, En la propiedad

Rows escribe 4 y en Columns escribe 60 Selecciona el botn y en el texto escribe Nuevo usuario Lo correcto es que los controles tengan nombres que indiquen para que son, Siguiendo el orden de arriba abajo, a las cajas de texto dale estos nombres: txtCorreo, txtClave, txtNombre y txtComentarios. Al botn dale el nombre btnNuevo A la etiqueta del final, dale el nombre lblAviso, el resto djalas con el nombre que tienen ya que no las usaremos desde el cdigo y da igual el nombre, pero si quieres, le puedes dar el nombre que te apetezca, aunque ya puestos, podra ser como el de la caja de textos que tienen al lado, pero en lugar de txt puedes usar lbl. Ahora vamos a darle funcionalidad al botn, de forma que al pulsar en l se cree un nuevo usuario con los datos que tenemos, Como queremos que las cosas se hagan bien, despus aadiremos validadores para que se escriba lo que haya que escribir . Haz dobleclick en el botn para que se muestre la ventana de cdigo. El cdigo se habr mostrado en un fichero aparte con el mismo nombre que la pgina y con la extensin del lenguaje que has elegido, en mi caso es: AgregarUsuario.aspx.vb Antes de hacer algo te explico que es lo que habra que hacer para aadir correctamente los datos. No debemos admitir ninguna de las cajas en blanco, salvo la de comentarios (ahora veremos cmo se realiza) La fecha la podremos nosotros de forma automtica, para que tenga la fecha actual Para que se muestre la fecha, deberamos agregar una nueva fila, por ejemplo, entre el nombre y los comentarios Selecciona la fila del nombre y pulsa en copiar Selecciona la fila de los comentarios y pulsa en pegar, se insertara una nueva fila Cambia el texto de la etiqueta a Fecha y el nombre de la caja de textos a txtFecha Como la fecha es de solo lectura, selecciona la caja de textos y en las propiedades, asigna el valor True a la propiedad ReadOnly Para que se vea de otro color, en las propiedades, selecciona BackColor y en el cuadro de propiedades que te muestra, selecciona la ficha Web y el color WhiteSmoke Otra cosa a hacer es que si ese correo ya existe, que diga que no es vlido Pero antes de hacer nada, necesitamos crear la conexin a la base de datos Una manera fcil de crear una conexin a la base que hemos creado es haciendo lo siguiente: Muestra la pgina de agregar usuario en modo diseo En el explorador de bases de datos, arrastra la tabla de Usuarios a la pgina Esto crear un GridView y un control DataSource, el GridView lo vamos a borrar Selecciona solo el GridView y pulsa la tecla suprimir, pulsa antes en cualquier parte de la pgina y despus selecciona el grid. Ahora tendrs un control llamado SqlDataSource1 que tendr todos los comandos para insertar, eliminar, actualizar, etc. Tambin se habr creado el fichero web.config con los datos de conexin a la base de datos Vamos a aadir controles de validacin para que el usuario tenga que escribir algo en ellos Muestra la pgina en modo de diseo y del Cuadro de herramientas, selecciona el grupo Validacin Arrastra un control RequiredFieldValidator y djalo al lado del textBox del correo Seguramente se pondr debajo de la caja de textos, posicinate justo delante del control de validacin y borra (con la tecla backspace) el espacio que habr, para que quede pegado al textBox, despus puedes pulsar un espacio para que haya algo de separacin Aade otro al lado de la caja de textos de la clave y otro al lado del textBox del nombre, Para la fecha y los comentarios no hace falta aadir ninguno Como queremos que la cuenta de correos sea valida, vamos a aadir un control de validacin de expresiones regulares junto al textBox del correo (detrs del validador que ya haba) En la ventana de propiedades, selecciona la propiedad ValidationExpression y pulsa en el botn Del cuadro de dialogo selecciona Direccin de correo electrnico de Internet y pulsa en aceptar Ahora vamos a enlazar esos controles de validacin con las cajas de texto correspondientes Selecciona el primer RequiredFieldValidator (Correo) y busca la propiedad ControlToValidate y de la lista desplegable que te mostrar, selecciona txtCorreo

Haz lo mismo con el control RegularExpressionValidator (el de la expresiones regulares) Ahora el de la clave y despus el del nombre, seleccionando los controles correspondientes en la propiedad ControlToValidate Puedes cambiar el mensaje de aviso de cada uno de los controles de validacin, con idea de que si, por ejemplo, no se escribe nada en la clave diga que debe escribir algo... La propiedad que debes asignar es ErrorMessage. Si queremos que la clave tenga un mnimo de caracteres, podemos agregar un control CustomValidator, indica que control se debe validar, escribe el texto del mensaje de error, por ejemplo: Debes escribir ms de 5 caracteres Haz dobleclic en el control de validacin y en el evento que se crea en el fichero de cdigo, escribe lo siguiente: (args es el nombre del segundo parmetro) args.IsValid = (args.Value.Length > 5) Esto har que se compruebe que no este vaco y que tenga ms de 5 caracteres, Si en lugar de hacer la validacin en el servidor, quieres hacerla en el lado del cliente, tendrs que crear un cdigo Script en la pagina con este cdigo: <script type="text/javascript"> function comprobarClave(oSrc, args){ args.IsValid = (args.Value.length > 5);} </script>

Selecciona el control y en la propiedad ClientValidationFunction escribe el nombre de la funcin, en este caso comprobarClave. Como los controles de validacin se empean en ponerse como les da la gana, si quieres, puedes poner todos esos controles de validacin en la parte inferior de la tabla, aunque en el caso de que, por ejemplo, el usuario pulse en el botn sin haber escrito nada, le mostrar todos los mensajes de error, por tanto, esos mensajes deberan decir lo que queremos que haga el usuario, es decir, no lo dejes con el texto predeterminado. Antes de seguir, decirte que si la caja de textos est en modo Password, y cuando se compruebe por cdigo si el usuario existe, etc., y se cancele la creacin del usuario, lo que se escriba se borrar, as que si quieres que se siga manteniendo la contrasea, debes dejarla como texto normal. En cualquier caso, mejor dejarlo como Password y si el usuario se equivoca, pues... que hubiese prestado ms atencin, je, je. Ahora vamos a escribir el cdigo de validacin de que el usuario no exista ya y en caso de que exista, que se cancele la insercin de datos, y si no existe, que se aada a la base de datos. Muestra el cdigo del evento del botn (el que creaste en el punto 19) Al principio del fichero aade las importaciones de los espacios de nombres que vamos a usar, en particular el System.Data.SqlClient Lo primero es comprobar si el usuario ya existe, por tanto vamos a ejecutar la siguiente sentencia (cadena de seleccin): SELECT Count(*) FROM Usuarios WHERE Correo = @Correo Esto har que se compruebe en la tabla de Usuarios si el correo escrito ya est, el truco es que si esas instrucciones devuelven algn valor que no sea cero, es que ya hay una cuenta de correo como la que buscamos. Para ejecutar esa sentencia de SQL vamos a usar un objeto SqlConnection y un objeto SqlCommand Para el objeto Connection necesitas la cadena de conexin, y como ya tenemos en el formulario (pagina Web) un objeto SqlDataSource, pues la tomamos de ah. Este es el cdigo para comprobar si el usuario ya existe, vers que uso una instruccin Using para controlar la conexin, de esa forma, si nos salimos nos aseguramos de que el objeto se destruye y se cierra la conexin, ya que esa instruccin se encarga de liberar todos los recursos que estuviera usando al llegar al final del bloque, en Visual Basic, ser al llegar a End Using. ' Comprobamos si el nombre ya existe Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString) Dim cmd As New SqlCommand( _ "SELECT Count(*) " & _ "FROM Usuarios " & _ "WHERE Correo = @Correo", cnn) ' Abrimos la conexin cnn.Open() ' Aadimos el valor del parmetro de la consulta cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text) ' Si devuelve algn valor, es que ya existe Dim i As Integer i = CInt(cmd.ExecuteScalar()) If i > 0 Then ' Avisamos y salimos Me.lblAviso.Text = "El usuario ya existe" Exit Sub End If ' Al salir del bloque Using se cierra la conexin End Using El parmetro @Correo lo asignamos usando el mtodo AddWithValue que es la forma ms cmoda de crear los parmetros al tiempo que se le asigna el valor que tendr.

Al llamar al mtodo ExecuteScalar del comando, le estamos diciendo que devuelva la primera columna de la primera fila, y como resulta que lo que queremos es el nmero de veces que est en la tabla Usuarios esa cuenta de correo, pues si ya est una vez, devolver un 1, si no est devolver un cero. El valor que devuelve esa funcin es de tipo Object, ya que en realidad el tipo devuelto depende de lo que pongamos despus de SELECT, en este caso es un valor entero, que es lo que devuelve la funcin Count(*). Si lo que devuelve es mayor de cero, es que hay algn correo como el que se ha escrito, por tanto mostramos el mensaje de error y salimos del mtodo. Si se contina, es decir, se llega despus del End Using, es que no existe esa cuenta de correo, por tanto debemos agregar los datos. Ahora debemos hacer casi lo mismo de antes, pero ejecutando el comando Insert, el cual tambin lo tomaremos del objeto SqlDataSource1. Aunque antes de guardar nada en la base de datos debemos asignar los valores de los parmetros, que si te fijas en el cdigo de la pgina, esos parmetros se llaman igual que los campos, pero empezando con la arroba (@). Otra cosa que debemos hacer es convertir el password (la clave) en un valor SHA1. Esto es para no guardar la clave como un texto en la base de datos, de esa forma, el que vea los datos que hay no sabr cual es la clave de cada usuario. Ese valor SHA1 lo podemos crear usando un objeto de tipo SHA1CryptoServiceProvider o bien usar la funcin HashPasswordForStoringInConfigFile de la clase FormsAuthentication, que es lo que normalmente haremos en una pgina Web, ya que as nos evitamos tener que crear nuestro propio cdigo. De todas formas, en el cdigo completo, he aadido la funcin para crear ese valor SHA1, por si quieres ver cmo hacerlo, por ejemplo para una aplicacin de Windows. Una vez que tenemos todo esto, lo juntamos y lo mezclamos bien... je, je, mejor es que veas el cdigo para que lo tengas ms claro: ' El usuario no existe, lo aadimos Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString) ' Usamos el comando Insert del DataSource Dim cmd As New SqlCommand(Me.SqlDataSource1.InsertCommand, cnn) ' Abrimos la conexin cnn.Open() ' Aadimos el valor del parmetro de la consulta cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text) ' La clave la guardaremos como un valor SHA1 Dim clave As String clave = FormsAuthentication.HashPasswordForStoringInConfigFile(txtClave.Text, "SHA1") 'clave = generarClaveSHA1(txtClave.Text) cmd.Parameters.AddWithValue("@Clave", clave) ' La fecha a guardar es la actual txtFecha.Text = DateTime.Now.ToString() cmd.Parameters.AddWithValue("@Fecha", txtFecha.Text) cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text) cmd.Parameters.AddWithValue("@Comentarios", txtComentarios.Text) ' Ejecutamos el comando de insercin cmd.ExecuteNonQuery() ' Al salir del bloque Using se cierra la conexin End Using Me.lblAviso.Text = "Se ha aadido el nuevo usuario correctamente" Ya lo nico que nos queda es poner en la pgina principal (Default.aspx) un link para que podamos entrar a la pgina de crear nuevos usuarios. En esa misma pgina crearemos links para otras funcionalidades, por ejemplo, modificar un dato o ver los datos que tenemos, etc. Muestra la pgina Default.aspx en modo diseo y del Cuadro de herramientas aade un control HyperLink, en la propiedad Text escribe Aadir usuario y en la propiedad NavigateUrl pulsa en el botn con los puntos suspensivos para que puedas seleccionar la pgina a la que quieres que navegue cuando se pulse en el link, en este caso la pgina que debes seleccionar del cuadro de dilogo que te muestra es AgregarUsuario.aspx Vamos a probar que todo funciona, pero antes, en el explorador de soluciones, selecciona la pgina Default.aspx y pulsando con el botn derecho, selecciona del men contextual la opcin Establecer

como pgina de inicio, de esta forma, cada vez que pulses F5 se iniciara con esa pgina, si no haces esto que te acabo de comentar, cuando pulses F5 se iniciara por la pgina que en ese momento est seleccionada. Una vez que est en ejecucin, prueba a no escribir nada en las cajas de texto y pulsa en el botn, vers que salen los mensajes de aviso. Sigue haciendo pruebas de validacin, por ejemplo no escribas bien el correo, escribe menos de 6 caracteres en la clave, etc. Una vez que hayas probado que las validaciones funcionan, introduce un usuario (o varios) y despus intenta introducir uno que ya exista, para que veas que se muestra el mensaje de error y esas cosas.

Imports System.Data.SqlClient ' Para la funcin generarClaveSHA1 Imports System.Security.Cryptography Partial Class AgregarUsuario Inherits System.Web.UI.Page Protected Sub btnNuevo_Click( ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNuevo.Click Me.lblAviso.Text = "" ' Comprobamos si el nombre ya existe Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString) Dim cmd As New SqlCommand( "SELECT Count(*) FROM Usuarios WHERE Correo = @Correo", cnn) ' Abrimos la conexin cnn.Open() ' Aadimos el valor del parmetro de la consulta cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text) ' Si devuelve algun valor, es que ya existe Dim i As Integer i = CInt(cmd.ExecuteScalar()) If i > 0 Then ' Avisamos y salimos Me.lblAviso.Text = "El usuario ya existe" Exit Sub End If ' Al salir del bloque Using se cierra la conexin End Using ' El usuario no existe, lo aadimos Using cnn As New SqlConnection(Me.SqlDataSource1.ConnectionString) ' Usamos el comando Insert del DataSource Dim cmd As New SqlCommand(Me.SqlDataSource1.InsertCommand, cnn) ' Abrimos la conexin cnn.Open() ' Aadimos el valor del parmetro de la consulta cmd.Parameters.AddWithValue("@Correo", txtCorreo.Text) ' La clave la guardaremos como un valor SHA1 Dim clave As String clave = FormsAuthentication.HashPasswordForStoringInConfigFile( txtClave.Text, "SHA1") 'clave = generarClaveSHA1(txtClave.Text) cmd.Parameters.AddWithValue("@Clave", clave) ' La fecha ser la actual txtFecha.Text = DateTime.Now.ToString cmd.Parameters.AddWithValue("@Fecha", txtFecha.Text) cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text) cmd.Parameters.AddWithValue("@Comentarios", txtComentarios.Text) ' Ejecutamos el comando de insercin

cmd.ExecuteNonQuery() ' Al salir del bloque Using se cierra la conexin End Using Me.lblAviso.Text = "Se ha aadido el nuevo usuario correctamente" End Sub Esta funcin es la que puedes usar en lugar del mtodo HashPasswordForStoringInConfigFile ' Necesita una importacin del espacio de nombres: ' System.Security.Cryptography Private Function generarClaveSHA1(ByVal clave As String) As String ' Crear una clave SHA1 como la generada por FormsAuthentication.HashPasswordForStoringInConfigFile Dim enc As New UTF8Encoding Dim data() As Byte = enc.GetBytes(clave) Dim result() As Byte ' Dim sha As New SHA1CryptoServiceProvider() result = sha.ComputeHash(data) ' ' Convertir los valores en hexadecimal cuando tiene una cifra hay que rellenarlo con cero para que siempre ocupen dos dgitos. Dim sb As New StringBuilder For i As Integer = 0 To result.Length - 1 ' Para que tengan 2 cifras hexadecimales y las letras sean en maysculas sb.Append(result(i).ToString("X2")) Next ' Return sb.ToString() End Function Este cdigo solo es necesario si no se valida en el lado del cliente, lo dejo porque forma parte de las pruebas a realizar. Pero para usarlo en el lado del cliente hay que comentarlo. Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, _ ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles CustomValidator1.ServerValidate args.IsValid = (args.Value.Length > 5) 'If args.Value < 6 Then ' args.IsValid = False 'End If End Sub End Class

Web Part en ASP.NET 2.0


Veamos cmo podemos configure una aplicacin web ASP.NET 2.0 para que soporte el uso de Web Parts. Los Web Parts proveen de un mecanismo muy sencillo para construir sitios web de manera modular y que se puedan personalizar dinmicamente, incluso al gusto del usuario final ofrecindole una mejor experiencia. Imagina la idea de que el usuario final decida como desea que se le presente la informacin de una pgina, en qu orden y en qu posicin los elementos de la misma sern acomodados y presentados. En este pequeo post veremos como con la tecnologa para el desarrollo web ASP.NET 2.0 podemos configurar rpidamente algunos componentes del .NET Framework 2.0 que nos permiten habilitar y programar Web Parts en nuestros formularios web. Los sitios que soportan este concepto de personalizacin y de modularidad deben de permitir al usuario final la posibilidad de mostrar la pagina en distintos modos:

En el modo normal (Normal Mode) el Web Part Framework muestra la pgina en un estado normal sin la posibilidad alguna de edicin o manipulacin. En el modo de edicin (Edit Mode) el Web Part Framework permite al usuario seleccionar una seccin en particular de la pagina para su completa edicin como los ttulos o colores del Web Part. En el modo de diseno (Design Mode) el Web Part Framework permite a los usuario finales re ajustar el orden de los componentes modulares de la pagina. En el modo catalogo (Catalog Mode) el Web Part Framework despliega una lista de secciones disponibles (Web PAts) que se pueden integrar a la pgina.

El primer concepto que debemos conocer para habilitar esta funcionalidad es el de zonas. Las zonas son las divisiones de una pgina susceptibles a mostrar o trabajar con web parts. Estas zonas las podemos declarar dentro de cualquier elemento HTML, normalmente utilizamos tablas para crear el esqueleto donde colocaremos nuestros web parts. Para que las zonas y web parts funcionen correctamente contamos con un control no visual llamado WebPartManager el cual administra los estados de las zonas y su contenido basado en un contexto de usuario. Este control tiene la capacidad de agregar o eliminar los elementos contenidos en cualquiera de las zonas y adems la facultad de comunicar o pasar datos entre webparts con otros web parts de otra zona. Podemos declararlo en nuestro pagina aspx o podemos arrastrarlo del cuadro de herramientas de Visual Studio 2005. <asp:WebPartManager ID="WebPartManager1" runat="server"> </asp:WebPartManager> Un consejo valioso es que si estas utilizando Master Pages te recomiendo que mejor hagas esta declaracin sobre la pagina maestra para replicar esta declaracin en todos los formularios de la aplicacin y en cualquier momento usar el comportamiento modular. Antes de continuar con la declaracin de las zonas, vamos a crear una tabla como la que se muestra a continuacin: <div style="text-align: center"> <table border="0" cellpadding="5" cellspacing="5" style="width: 800px; height: 400px"> <tr> <td style="width: 100px"> </td> <td style="width: 11px"> </td> <td style="width: 100px"> </td> </tr> </table> </div>

El siguiente paso es declarar nuestras zonas dentro de cada celda de la tabla creada. Utilizando el control WebPartZone de la caja de herramientas de Visual Studio 2008 podemos arrstralo a cada una de las celdas de nuestra tabla. Cabe mencionar que dentro de la zona es donde por fin podremos especificar aquellos controles que estamos acostumbrados a utilizar para programar nuestra aplicacin. Tenemos que especificar dentro de nuestra control WebPartZone una seccin llamada <ZoneTemplate> que ser nuestra plantilla HTML donde podremos colocar los controles de nuestra pgina. En mi caso utilizare unos controles de usuario creados por m. Estn sencillo solamente muestra informacin en un control GridView. Primero agregamos nuestras dos zonas quedando de la siguiente manera: <table border="0" cellpadding="5" cellspacing="5" style="width: 800px; height: 400px"> <tr> <td style="width: 100px; text-align: left;"> <asp:WebPartZone ID="WebPartZone1" runat="server" Height="400px" Width="390px"> <ZoneTemplate> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" /> <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" /> <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" /> <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> <asp:BoundField DataField="Region" HeaderText="Region" SortExpression="Region" /> <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" /> </Columns> </asp:GridView> </ZoneTemplate> </asp:WebPartZone> </td> <td style="width: 11px"> </td> <td style="width: 100px; text-align: left;"> <asp:WebPartZone ID="WebPartZone2" runat="server" Height="400px" Width="390px"> <ZoneTemplate> <asp:Calendar ID="Calendar1" runat="server" Height="275px" Width="380px"></asp:Calendar> </ZoneTemplate> </asp:WebPartZone> </td> </tr> </table> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString=" Data Source=laptop_021;Initial Catalog=Northwind;User ID=sa;Password=dba" SelectCommand="SELECT [EmployeeID], [LastName], [FirstName], [City], [Region], [Country] FROM [Employees]"> </asp:SqlDataSource>

Y para finalizar, tenemos que especificar algn mecanismo que nos permita a nuestra pagina cambiar de estado y podamos mover nuestros web parts de zona a zona. Para lograrlo simplemente vamos a agregar un control DropDownList fuera de las zonas y escribimos el siguiente cdigo, no olvidemos seleccionar la propiedad AutoPostBack = True: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If (Not Page.IsPostBack) Then Dim mode As WebPartDisplayMode For Each mode In WebPartManager1.SupportedDisplayModes Dim modename As String modename = mode.Name DropDownList1.Items.Add(New ListItem(modename, modename)) Next End If End Sub Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged Dim DisplayMode As WebPartDisplayMode DisplayMode = WebPartManager1.SupportedDisplayModes(DropDownList1.SelectedValue.ToString()) WebPartManager1.DisplayMode = DisplayMode End Sub

Objeto SqlDataSource
Ttiene la propiedad de hacer el query y a la vez el Databind(a la base de datos), lo cual nos ayuda a tener esenarios muchos mas limpios de trabajo y mucho mas ordenados, tiene 2 parametros que son importantes para el manejo de data: ConnectionString = Cadena de conexin para el manejo de la Informacion SelectCommand = El comando para la recuperacion de la informacion

Ejemplo # 1

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Pagina de Datos con DataBinding en ASP.Net 2.0</title> </head> <body> <form id="form1" runat="server"> <asp:Label runat="server" Font-Bold="TRUE">MANEJO DE DATA CON EL SQLDATASOURCE</asp:Label> <asp:SqlDataSource ID="titles" runat="server" ConnectionString="server=.;database=pubs;integrated security=true" SelectCommand="Select title_id, title, price from titles"/> <asp:DataGrid DataSourceID="Titles" runat="server" BackColor="pink"/> </form> </body> </html>

Ejemplo # 2

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Ejercicio Utilizando el SqlDataSource y Filtrar la Informacion</title> </head> <body> <form id="form1" runat="server"> <asp:DropDownList ID="DDlist1" runat="server" AutoPostBack="true" DataSourceID="SqldataSource3" DataTextField="OrderId" DataValueField="OrderId" AppendDataBoundItems="True" > <asp:ListItem Value="">0</asp:ListItem> //ESTO SE PONE DESPUES EN LOS PASOS PARA TODOS </asp:DropDownList> <asp:SqlDataSource ID="SqldataSource3" runat="server" ConnectionString="server=.;database=Northwind;integrated security=true" SelectCommand="Select OrderId from Orders"></asp:SqlDataSource> <br /><br /> <asp:GridView ID="gridView" runat="server" AutoGenerateColumns="false" BackColor="lightgoldenrodyellow" BorderColor="tan" BorderWidth="1px" CellPadding="2" DataKeyNames="OrderId" DataSourceID="SqlDataSource1" ForeColor="black" GridLines="none" PageSize="4"> <FooterStyle BackColor="tan" /> <Columns> <asp:BoundField DataField="OrderID" HeaderText="OrderID" SortExpression="OrderID" /> <asp:BoundField DataField="ProductId" HeaderText="ProductId" SortExpression="ProductId" /> <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /> </Columns> <PagerStyle BackColor="palegoldenrod" ForeColor="darkslateblue" HorizontalAlign="center" /> <HeaderStyle BackColor="tan" Font-Bold="true" /> <AlternatingRowStyle BackColor="palegoldenrod" /> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="server=.;database=Northwind;integrated security=true" SelectCommand="Select * from [Order details] where OrderId = @OrderId " CancelSelectOnNullParameter="False"> <SelectParameters> <asp:ControlParameter ControlID="DDlist1" Name="OrderId" PropertyName="SelectedValue" Type="String" /> </SelectParameters> </asp:SqlDataSource> </form> </body> </html>

Introduccin a los Servicios Web y XML.


Un servicio Web es una forma de presentar un servicio, al que se puede acceder a travs de Internet. Igual que una pgina Web est definida por un URL sin interfaz grafica, un servicio Web al igual que una pgina Web puede ofrecer cotizaciones de la bolsa de NY, un servicio Web puede hacer lo mismo, presentar un interfaz para que se pueda acceder fcilmente a los mtodos publicados, De esta forma, las aplicaciones se convierten en clientes que involucran dentro de ellas servicios Web procedentes de diferentes proveedores va Web , y adems, se abre la posibilidad de que se genere un nuevo tipo de negocio el cual se cobre por uso del servicio.

Creacion de un Servicio WEB


El desarrollo de aplicaciones en entorno Internet ha pasado por distintas etapas desde los inicios con el protocolo HTTP, los navegadores y los documentos HTML. El panorama del desarrollo de aplicaciones .Net se caracteriza por la gran sofisticacin que han alcanzado los servidores y las herramientas de desarrollo asociadas. Por un lado, desde el punto de vista del diseo, en el que contamos con herramientas visuales de todo tipo y editores HTML que haran las delicias de los viejos programadores de Bloc de notas. Por otro, desde el punto de vista del desarrollo, con lenguajes, libreras y generadores de cdigo de todo tipo, y con servidores Web y de aplicaciones con infinidad de ayudas para el acceso a sistemas de base de datos, poolings de objetos, cach de pginas y datos, soporte transaccional, etc. Un servicio es un componente programable que proporciona un servicio y es accesible por Internet, Los servicios Web pueden funcionar de manera independiente o pueden estar conectados entre s para proporcionar una funcionalidad mayor. En resumen podramos decir: Son componentes que nos permiten crear aplicaciones independientes de la plataforma. Se pueden usar servicios Web para integrar aplicaciones escritas en lenguajes diferentes Un servicio Web consta de los siguientes 3 elementos: El Servicio: Software que puede procesar ciertos documentos XML bien definidos recibidos mediante alguna combinacin de protocolos de transporte y de aplicacin. El Documento XML: Contiene toda la informacin especfica de la aplicacin que el consumidor del servicio enva al servicio para procesar. La Direccin: Una direccin de red junto con un binding de protocolo que pueden utilizarse para acceder al servicio

En la prctica, hace falta un cuarto elemento: La Envoltura: Un protocolo de encapsulacin de mensajes que separa el documento UML de la otra informacin que se quiere intercambiar

Como trabaja una Aplicacin WEB


Una aplicacin Web es aquella que los usuarios se conectan a travs de un servidor Web mediante una Intranet o Internet, los servicios Web pueden involucrarse dentro de ella haciendo referencia al servidor de servicios Web mediante una referencia Web.

Creacin de un Web Services


Primero tenemos que agregar un nuevo proyecto de Web Services, para esto desde men archivo seleccionamos agregar nuevo proyecto Web.

La siguiente pantalla escogeremos el proyecto tipo ASP.NET Web Services como indica en la figura siguiente.

Al dar aceptar dentro de nuestro explorador de soluciones, quedara agregado el proyecto como sigue:

La primera clase que aparecer ser una clase llamada Service.asmx, y esta muestra como por ejemplo por default la funcin HelloWord

Al ejecutar nuestro Web Services, veremos la muestra de nuestra funcin por default HelloWord, como se muestra aqu:

. Al seleccionar la funcin tendremos nuevamente la descripcin del SOAP a enviarse va HTTP, el cual nos proporciona el evento para ser invocado Invoke.

Al seleccionar la ejecucin de la funcin HelloWord, este aparecer descripta va XML, para ser enviada va http, como se muestra en la figura:

Creando mtodos en un Web Services. Para crear mtodos que se basen en Web Services, se debe agregar el atributo <WebMethod()>, que indica al sistema de tiempo de ejecucin que es un mtodo llamado a travs de HTTP. No todos los mtodos tienen que ser WebMethods. Por ejemplo, dentro de la clase Service agreguemos la siguiente funcin:

Al compilar y ejecutar el Web Services este mostrara las dos funciones, si agregamos una nueva funcin sin el atributo WebMethods este no ser visible como estas dos que aparecen:

Ahora como bien hemos visto la funcin creada Login necesita el envi de parmetros, por lo tanto al seleccionar esta funcin veremos que nos solicita las variables necesarias para la ejecucin:

Al invocar a esta funcin veremos la respuesta enviada como se muestra aqu:

Consumiendo un Web Services desde una aplicacin ASP.NET


Para consumir un servicio Web este debe ser agregado a nuestro proyecto de donde queremos utilizarlo, para esto desde el explorador de soluciones debemos seleccionar el proyecto, Click derecho y escogemos Agregar referencia Web, como se muestra en la figura:

Ahora prestemos atencin, cuando ejecutamos el proyecto de Web Services, nos salio una ruta en el explorador, esta ruta que aparece la copiaremos para agregarlo en la referencia Web.

Esta direccin guardada la colocamos en la pantalla que nos muestra al agregar la referencia Web:

Al seleccionar en el botn Ir, veremos nuestro servicio creado, cargado en nuestra referencia Web, al cual a nuestra referencia la llamaremos servClase5.

Finalmente en nuestro proyecto se creara la siguiente referencia Web con el nombre que colocamos anteriormente:

Bien hasta aqu en nuestro proyecto ya creamos la referencia Web, ahora crearemos un formulario con el nombre frmServicio, el cual debe quedar con el siguiente diseo.

Dentro de el crearemos una variable con mbito global:

Ahora en el botn usaremos este servicio de la forma siguiente:

Finalmente ejecutemos el formulario, y se vera lo siguiente:

Mantenimiento con Procedimientos Almacenados en ASP.NET


Vamos a realizar un Proyecto en el cual vamos a realizar un mantenimiento completo utilizando procedimientos almacenados. Primero Crearemos la siguiente Interface

Ahora vamos a empezar a codificar, para poder trabajar con este mantenimiento. Imports System.Data Imports System.Data.SqlClient Partial Class _Default Inherits System.Web.UI.Page Dim xcon As New SqlConnection("server=.;database=DBApplica;integrated security= true") Dim dt As New DataSet Private Sub Limpiar() txtCodigo.Text = "" txtNombre.Text = "" txtApellido.Text = "" txtClave.Text = "" txtDireccion.Text = "" End Sub

Protected Sub btnAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAgregar.Click Try xcon.Open() Dim xcmd As New SqlCommand("si_clientes", xcon) xcmd.CommandType = CommandType.StoredProcedure With xcmd .Parameters.Add("nombre", txtNombre.Text) .Parameters.Add("apellidos", txtApellido.Text) .Parameters.Add("direccion", txtDireccion.Text) .Parameters.Add("clave", txtClave.Text) .ExecuteNonQuery() End With lblMensaje.Text = "Grabo Correctamente, Cliente Agregado" Catch ex As Exception lblMensaje.Text = ex.Message Finally xcon.Close() Limpiar() Mostrar() End Try End Sub

Private Sub Mostrar() Try xcon.Open() Dim xcmd As New SqlCommand("ss_clientes", xcon) xcmd.CommandType = CommandType.StoredProcedure Dim Adapter As New SqlDataAdapter(xcmd) dt.Clear() Adapter.Fill(dt) GridView1.DataSource = dt.Tables(0) GridView1.DataBind() Catch ex As Exception lblMensaje.Text = ex.Message Finally xcon.Close() End Try End Sub

Private Sub LLenarDesdeGrid() With dt.Tables(0).Rows(GridView1.SelectedIndex.ToString) 'with dt.tables(0).rows(DataGrid.CurrentCell.RowIndex) txtCodigo.Text = .ItemArray(0) txtNombre.Text = .ItemArray(1) txtApellido.Text = .ItemArray(2) txtDireccion.Text = .ItemArray(3) txtClave.Text = .ItemArray(4) End With End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Mostrar() End Sub

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged LLenarDesdeGrid() End Sub

Protected Sub btnEliminar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEliminar.Click Try xcon.Open() Dim xcmd As New SqlCommand("sd_clientes", xcon) xcmd.CommandType = CommandType.StoredProcedure xcmd.Parameters.Add("codigo", txtCodigo.Text) xcmd.ExecuteNonQuery() lblMensaje.Text = "Elimino Correctamente....!!!" Catch ex As Exception lblMensaje.Text = ex.Message Finally xcon.Close() Limpiar() Mostrar() End Try End Sub

Protected Sub btnModificar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnModificar.Click Try xcon.Open() Dim xcmd As New SqlCommand("su_clientes", xcon) xcmd.CommandType = CommandType.StoredProcedure With xcmd .Parameters.Add("codigo", txtCodigo.Text) .Parameters.Add("nombre", txtNombre.Text) .Parameters.Add("apellidos", txtApellido.Text) .Parameters.Add("direccion", txtDireccion.Text) .ExecuteNonQuery() lblMensaje.Text = "GRABO CORRECTAMENTE...!!!" End With Catch ex As Exception lblMensaje.Text = "NO GRABO...ERROR" Finally xcon.Close() Limpiar() Mostrar() End Try End Sub End Class

S-ar putea să vă placă și