presentación del tutorial de asp

Download Presentación del tutorial de ASP

If you can't read please download the document

Upload: jose-francisco-castano

Post on 06-Aug-2015

161 views

Category:

Documents


6 download

DESCRIPTION

Tutorial asp

TRANSCRIPT

Presentacin del tutorial de ASP.NETEl tutorial de ASP.NET comprende un conjunto de ejemplos y comentarios relacionados acerca de ASP.NET, diseado para explicar rpidamente a los programadores la sintaxis, la arquitectura y la eficacia del marco de programacin para aplicaciones Web de ASP.NET. Los ejemplos del tutorial se disearon en forma de ilustraciones breves y fciles de comprender de las caractersticas de ASP.NET. Cuando haya completado el tutorial, estar familiarizado con:

La sintaxis de ASP.NET. Aunque algunos de los elementos de la sintaxis de ASP.NET sern familiares para los programadores veteranos de ASP, otros son exclusivos del nuevo marco de trabajo. Los ejemplos del tutorial describen cada elemento en detalle. La arquitectura y las caractersticas de ASP.NET. En el tutorial se describen las caractersticas de ASP.NET, que permiten a los programadores crear aplicaciones interactivas de primer nivel con mucho menos esfuerzo que antes. Los mejores procedimientos. Los ejemplos del tutorial explican las mejores formas de utilizar la eficacia de ASP.NET y la forma de evitar posibles errores al hacerlo.

Nivel de conocimientos necesario para poder seguir el tutorialSi no tiene experiencia en programacin de pginas, este tutorial no es lo ms aconsejable. Debe tener conocimientos acerca de HTML y de terminologa general de programacin Web. No necesita experiencia previa en ASP, pero debe conocer los conceptos bsicos relacionados con pginas Web interactivas, como "formulario", "secuencia de comando" y "acceso a datos".

Trabajar con los ejemplos del tutorialEs mejor estudiar los ejemplos del tutorial en el orden en que se presentan. Cada ejemplo se basa en conceptos tratados en el ejemplo anterior. La serie empieza con el envo de un formulario sencillo y contina con ms ejemplos hasta desarrollar escenarios de aplicacin integrados.

Qu es ASP.NET?ASP.NET es un marco de trabajo de programacin generado en Common Language Runtime que puede utilizarse en un servidor para generar eficaces aplicaciones Web. ASP.NET ofrece varias ventajas importantes acerca de los modelos de programacin Web anteriores:

Mejor rendimiento. ASP.NET es un cdigo de Common Language Runtime compilado que se ejecuta en el servidor. A diferencia de sus predecesores, ASP.NET puede aprovechar las ventajas del enlace anticipado, la compilacin just-in-time, la optimizacin nativa y los servicios de cach desde el primer momento. Esto supone un incremento espectacular del rendimiento antes de siquiera escribir una lnea de cdigo.

Compatibilidad con herramientas de primer nivel. El marco de trabajo de ASP.NET se complementa con un diseador y una caja de herramientas muy completos en el entorno integrado de programacin (Integrated Development Environment, IDE) de Visual Studio. La edicin WYSIWYG, los controles de servidor de arrastrar y colocar y la implementacin automtica son slo algunas de las caractersticas que proporciona esta eficaz herramienta.

Eficacia y flexibilidad. Debido a que ASP.NET se basa en Common Language Runtime, la eficacia y la flexibilidad de toda esa plataforma se encuentra disponible para los programadores de aplicaciones Web. La biblioteca de clases de .NET Framework, la Mensajera y las soluciones de Acceso a datos se encuentran accesibles desde el Web de manera uniforme. ASP.NET es tambin independiente del lenguaje, por lo que puede elegir el lenguaje que mejor se adapte a la aplicacin o dividir la aplicacin en varios lenguajes. Adems, la interoperabilidad de Common Language Runtime garantiza que la inversin existente en programacin basada en COM se conserva al migrar a ASP.NET.

Simplicidad. ASP.NET facilita la realizacin de tareas comunes, desde el sencillo envo de formularios y la autenticacin del cliente hasta la implementacin y la configuracin de sitios. Por ejemplo, el marco de trabajo de pgina de ASP.NET permite generar interfaces de usuario, que separan claramente la lgica de aplicacin del cdigo de presentacin, y controlar eventos en un sencillo modelo de procesamiento de formularios de tipo Visual Basic. Adems, Common Language Runtime simplifica la programacin, con servicios de cdigo administrado como el recuento de referencia automtico y el recolector de elementos no utilizados.

Facilidad de uso. ASP.NET emplea un sistema de configuracin jerrquico, basado en texto, que simplifica la aplicacin de la configuracin al entorno de servidor y las aplicaciones Web. Debido a que la informacin de configuracin se almacena como texto sin formato, se puede aplicar la nueva configuracin sin la ayuda de herramientas de administracin local. Esta filosofa de "administracin local cero" se extiende asimismo a la implementacin de las aplicaciones ASP.NET Framework. Una aplicacin ASP.NET Framework se implementa en un servidor sencillamente mediante la copia de los archivos necesarios al servidor. No se requiere el reinicio del servidor, ni siquiera para implementar o reemplazar el cdigo compilado en ejecucin.

Escalabilidad y disponibilidad. ASP.NET se ha diseado teniendo en cuenta la escalabilidad, con caractersticas diseadas especficamente a medida, con el fin de mejorar el rendimiento en entornos agrupados y de mltiples procesadores. Adems, el motor de tiempo de ejecucin de ASP.NET controla y administra los procesos de cerca, por lo que si uno no se comporta adecuadamente (filtraciones, bloqueos), se puede crear un proceso nuevo en su lugar, lo que ayuda a mantener la aplicacin disponible constantemente para controlar solicitudes.

Posibilidad de personalizacin y extensibilidad. ASP.NET presenta una arquitectura bien diseada que permite a los programadores insertar su cdigo en el nivel adecuado. De hecho, es posible extender o reemplazar cualquier subcomponente del motor de tiempo de ejecucin de ASP.NET con su propio componente escrito personalizado. La implementacin de la autenticacin personalizada o de los servicios de estado nunca ha sido ms fcil.

Seguridad. Con la autenticacin de Windows integrada y la configuracin por aplicacin, se puede tener la completa seguridad de que las aplicaciones estn a salvo. El resto del tutorial presenta ejemplos prcticos de estos conceptos.

Compatibilidad de lenguajesLa Plataforma Microsoft .NET ofrece actualmente compatibilidad integrada para tres lenguajes: C#, Visual Basic y JScript. En los ejercicios y los ejemplos de cdigo de este tutorial se muestra cmo utilizar C#, Visual Basic y JScript para generar aplicaciones .NET. Para obtener ms informacin sobre la sintaxis de los dems lenguajes, consulte la documentacin completa del Kit de desarrollo de software (SDK) de .NET Framework. La siguiente tabla ayuda a comprender los ejemplos de cdigo de este tutorial as como las diferencias entre los tres lenguajes:

Declaraciones de variablesDim x As Integer Dim s As String Dim s1, s2 As String Dim o 'Implicitly Object Dim obj As New Object() Public name As String

InstruccionesResponse.Write("foo")

Comentarios' This is a comment ' This ' is 'a ' multiline ' comment

Obtener acceso a propiedades indizadasDim s, value As String s = Request.QueryString("Name") value = Request.Cookies("Key").Value 'Note that default non-indexed properties 'must be explicitly named in VB

Declarar propiedades indizadas' Default Indexed Property Public Default ReadOnly Property DefaultProperty(Name As String) As String Get Return CStr(lookuptable(name)) End Get End Property

Declarar propiedades sencillasPublic Property Name As String Get ... Return ... End Get Set ... = Value End Set End Property

Declarar y utilizar una enumeracin' Declare the Enumeration Public Enum MessageSize Small = 0 Medium = 1 Large = 2 End Enum ' Create a Field or Property Public MsgSize As MessageSize ' Assign to the property using the Enumeration values MsgSize = small

Enumerar una coleccinDim S As String For Each S In Coll ... Next

Declarar y utilizar mtodos

' Declare a void return function Sub VoidFunction() ... End Sub ' Declare a function that returns a value Function StringFunction() As String ... Return CStr(val) End Function ' Declare a function that takes and returns values Function ParmFunction(a As String, b As String) As String ... Return CStr(A & B) End Function ' Use the Functions VoidFunction() Dim s1 As String = StringFunction() Dim s2 As String = ParmFunction("Hello", "World!")

Atributos personalizados' Stand-alone attribute ' Attribute with parameters ' Attribute with named parameters

MatricesDim a(2) As String a(0) = "1" a(1) = "2" a(2) = "3" Dim a(2,2) As String a(0,0) = "1" a(1,0) = "2" a(2,0) = "3"

InicializacinDim s As String = "Hello World" Dim i As Integer = 1 Dim a() As Double = { 3.00, 4.00, 5.00 }

Instrucciones ifIf Not (Request.QueryString = Nothing) ...

End If

Instrucciones caseSelect Case FirstName Case "John" ... Case "Paul" ... Case "Ringo" ... Case Else ... End Select

Bucles forDim I As Integer For I = 0 To 2 a(I) = "test" Next

Bucles whileDim I As Integer I=0 Do While I < 3 Console.WriteLine(I.ToString()) I += 1 Loop

Control de excepcionesTry ' Code that throws exceptions Catch E As OverflowException ' Catch a specific exception Catch E As Exception ' Catch the generic exceptions Finally ' Execute some cleanup code End Try

Concatenacin de cadenas' Using Strings Dim s1, s2 As String s2 = "hello" s2 &= " world" s1 = s2 & " !!!" ' Using StringBuilder class for performance Dim s3 As New StringBuilder() s3.Append("hello") s3.Append(" world")

s3.Append(" !!!")

Delegados de controlador de eventosSub MyButton_Click(Sender As Object, E As EventArgs) ... End Sub

Declarar eventos' Create a public event Public Event MyEvent(Sender as Object, E as EventArgs) ' Create a method for firing the event Protected Sub OnMyEvent(E As EventArgs) RaiseEvent MyEvent(Me, E) End Sub

Agregar o quitar controladores de eventos en eventosAddHandler Control.Change, AddressOf Me.ChangeEventHandler RemoveHandler Control.Change, AddressOf Me.ChangeEventHandler

Conversin de tiposDim obj As MyObject Dim iObj As IMyObject obj = Session("Some Value") iObj = CType(obj, IMyObject)

ConversinDim i As Integer Dim s As String Dim d As Double i=3 s = i.ToString() d = CDbl(s) ' See also CDbl(...), CStr(...), ...

Definicin de clase con herenciaImports System Namespace MySpace Public Class Foo : Inherits Bar Dim x As Integer Public Sub New() MyBase.New()

x=4 End Sub Public Sub Add(x As Integer) Me.x = Me.x + x End Sub Overrides Public Function GetNum() As Integer Return x End Function End Class End Namespace ' vbc /out:libraryvb.dll /t:library ' library.vb

Implementar una interfazPublic Class MyClass : Implements IEnumerable ... Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator ... End Function End Class

Definicin de clase con un mtodo principalImports System Public Class ConsoleVB Public Sub New() MyBase.New() Console.WriteLine("Object Created") End Sub Public Shared Sub Main() Console.WriteLine("Hello World") Dim cvb As New ConsoleVB End Sub End Class ' vbc /out:consolevb.exe /t:exe console.vb

Mdulo estndarImports System Public Module ConsoleVB Public Sub Main() Console.WriteLine("Hello World") End Sub

End Module ' vbc /out:consolevb.exe /t:exe console.vb

Web Forms ASP.NET

Presentacin de formularios Web Qu son los formularios Web de ASP.NET?El marco de trabajo de la pgina de formularios Web de ASP.NET es un modelo de programacin escalable de Common Language Runtime que puede utilizarse en el servidor para generar pginas Web dinmicamente. Concebido como una evolucin lgica de ASP (ASP.NET proporciona compatibilidad sintctica con las pginas existentes), el marco de trabajo de formularios Web ASP.NET se ha diseado especficamente para tratar varias deficiencias clave del modelo anterior. En particular, proporciona:

Capacidad para crear y utilizar controles de la interfaz de usuario reutilizables que puedan encapsular funcionalidades comunes y, as, reducir la cantidad de cdigo que tiene que escribir el programador de una pgina. Capacidad para que los programadores puedan estructurar limpiamente la lgica de la pgina de forma ordenada (no revuelta). Capacidad para que las herramientas de desarrollo proporcionen un fuerte soporte de diseo WYSIWYG (Lo que ve es lo que se imprime) a las pginas (el cdigo ASP existente es opaco para las herramientas). Es esta seccin se proporciona un recorrido con cdigo de gran nivel por algunas de las funciones claves de formularios Web de ASP.NET. En las siguientes secciones, se profundizar en detalles ms concretos.

Escribir la pgina de formularios WebLas pginas de formularios Web de ASP.NET consisten en archivos de texto con una extensin de nombre de archivo .aspx. Pueden implementarse por todo un rbol de directorio raz virtual IIS. Cuando un explorador cliente solicita recursos .aspx, el motor en tiempo de ejecucin de ASP.NET analiza y compila el archivo de destino en una clase de .NET Framework. Esta clase puede utilizarse, a continuacin, para procesar de forma dinmica las solicitudes entrantes. (Debe observarse que el archivo .aspx slo se compila la primera que se tiene acceso al mismo; la instancia de tipo compilada se vuelve a utilizar en mltiples solicitudes). Una pgina de ASP.NET puede crearse tomando simplemente un archivo HTML existente y cambiando la extensin del nombre de archivo a .aspx (no se necesita ninguna modificacin del cdigo). En el siguiente ejemplo se muestra una pgina HTML sencilla que recoge una preferencia de categora y un nombre de usuario, y a continuacin realiza una devolucin de formulario a la pgina de origen cuando se hace clic sobre el botn:

Nombre: Categora: psychology business popular_comp

Importante: Debe observarse que no sucede nada cuando se hace clic en el botn Lookup. Esto sucede porque el archivo .aspx slo contiene HTML esttico (sin contenido dinmico). As pues, el mismo HTML se enva de vuelta al cliente en cada viaje a la pgina, lo que conlleva una prdida de los contenidos de los campos del formulario (el cuadro de texto y la lista desplegable) entre solicitudes.

Utilizar bloques de representacin ASP ASP.NET proporciona compatibilidad sintctica con pginas ASP existentes. Esto incluye compatibilidad para bloques de representacin de cdigo que pueden entremezclarse con contenido HTML dentro de un archivo .aspx. Estos bloques de cdigo se ejecutan de arriba a abajo en tiempo de representacin de pgina. En el siguiente ejemplo se muestra cmo se pueden utilizar bloques de representacin para ascender en bucle por un bloque HTML (aumentando el tamao de fuente cada vez):

Nombre: Categora: psychology business popular_comp Bienvenido a ASP.NET

Importante: A diferencia de ASP, el cdigo que se utiliza en los bloques anteriores realmente se compila, no se interpreta mediante un motor de secuencias de comandos. Esto produce un mejor rendimiento de la ejecucin en tiempo de ejecucin.

Los programadores de pginas ASP.NET pueden utilizar bloques de cdigo para modificar dinmicamente resultados HTML ms de lo que se puede actualmente con ASP. En el siguiente ejemplo se muestra cmo se pueden utilizar bloques de cdigo para interpretar resultados devueltos desde un cliente.

Nombre: Categora: Hola , ha seleccionado:

Importante: Mientras que los bloques de cdigo proporcionan una forma potente de manipular de forma personalizada el resultado de texto devuelto desde una pgina ASP.NET, no proporcionan un modelo de programacin HTML limpio. Tal y como se muestra en el ejemplo anterior, los programadores que slo utilizan bloques de cdigo deben administrar de forma personalizada el estado de pgina entre acciones de ida y vuelta e interpretar valores expuestos.

Introduccin a controles de servidor ASP.NETAdems de (o en vez de) utilizar bloques de cdigo para programar contenido dinmico, los programadores de pginas ASP.NET pueden utilizar controles de servidor ASP.NET para programar pginas Web. Los controles de servidor se declaran dentro de un archivo .aspx mediante etiquetas personalizadas o etiquetas HTML intrnsecas que contienen un valor de atributo runat="server". Las etiquetas HTML intrnsecas las controla uno de los controles del espacio de nombres System.Web.UI.HtmlControls. A cualquier etiqueta que no est explcitamente asignada a uno de los controles se le asigna el tipo de System.Web.UI.HtmlControls.HtmlGenericControl. En el siguiente ejemplo se utilizan cuatro controles de servidor: , , , y . En tiempo de ejecucin, estos controles de servidor generan contenido HTML automticamente.

Nombre: Categora: psychology business popular_comp

Importante: Debe tenerse en cuenta que estos controles de servidor mantienen automticamente cualquier valor introducido por el cliente entre acciones de ida y vuelta al servidor. El estado del control no se almacena en el servidor, sino en un campo del formulario que recibe acciones de ida y vuelta entre solicitudes. Hay que tener en cuenta que no se necesita ninguna secuencia de comando en el cliente. Adems de admitir controles estndar de entrada HTML, ASP.NET permite programadores utilizar controles personalizados enriquecidos en las En el siguiente ejemplo se demuestra cmo puede utilizarse el control para mostrar dinmicamente en la pgina anuncios en a los pginas. rotacin.

Nombre: Categora: psychology business popular_comp

Importante: Se puede encontrar un listado detallado de todos los controles de servidor integrados en la seccin Referencia de controles de formularios Web de este tutorial.

Controlar eventos de controles de servidorCada control de servidor ASP.NET puede exponer un modelo de objeto con propiedades, mtodos y eventos. Los programadores de ASP.NET pueden utilizar este modelo de objeto para modificar e interactuar limpiamente con la pgina. En el siguiente ejemplo se muestra cmo un programador de pginas ASP.NET puede controlar el evento OnClick desde el control para manipular la propiedad Text del control .

Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Message.Text = "Hola " & Name.Text & ", ha selecionado: " & Category.SelectedItem.Text End Sub

Nombre: Categora: psychology business popular_comp

Este simple ejemplo resulta equivalente al ejemplo "Intro3" que se mostr antes en esta misma seccin. No obstante, debe observarse que el cdigo es mucho ms limpio y sencillo en esta nueva versin basada en el control de servidor.

Utilizar controles de servidor personalizadosASP.NET incluye 45 controles de servidor integrados que se pueden utilizar fuera del cuadro (para obtener ms detalles, vea Referencia de controles de formularios Web). Adems de utilizar los controles integrados de ASP.NET, los programadores tambin pueden utilizar controles desarrollados por otros fabricantes. En el siguiente ejemplo se muestra un control Calendar sencillo. El control Calendar se declara en la pgina mediante una etiqueta . Debe observarse que la directiva al principio de la pgina es la responsable de registrar el prefijo de etiqueta XML con el espacio de nombres de cdigo "Acme" de la implementacin del control. El localizador de pginas de ASP.NET utilizar entonces este espacio de nombres para cargar la instancia de la clase del control Calendar en tiempo de ejecucin.

Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Message.Text = "Hola " & Name.Text & ", ha selecionado: " & Category.SelectedItem.Text & " el: " & MyCal.Date.ToShortDateString() End Sub

Nombre: Categora: psychology business popular_comp

El control Calendar de este ejemplo se ha diseado para realizar procesos similares a los de alto nivel en Internet Explorer 5.5 y procesos de bajo nivel en todos los dems exploradores. El olfateo de este explorador no es, en absoluto, ms complejo que el que proporcionan los controles de servidor integrados de ASP.NET. Para los exploradores Internet Explorer 5.5, genera resultados DHTML. Dicho resultado no necesita acciones de ida y vuelta al servidor cuando se realizan selecciones de da y desplazamientos de mes. Para el resto de exploradores, el control genera HTML 3.2 estndar. HTML 3.2 necesita acciones de ida y vuelta al servidor para controlar interacciones del usuario en el cliente. Importante: El cdigo que escribe el programador de una pgina es idntico, sin importar si se empleo un explorador de alto o bajo nivel para tener acceso a la pgina. El mismo control Calendar encapsula toda la lgica necesaria para controlar ambos escenarios.

Listas, datos y enlace de datosASP.NET incluye un conjunto integrado de controles de lista y cuadrcula de datos. Se pueden utilizar para proporcionar una interfaz de usuario personalizada basada en consultas a una base de datos o a otro origen de datos. En el siguiente ejemplo se muestra cmo se puede utilizar un control para enlazar mediante datos informacin de libros recogida mediante una consulta a una base de datos de SQL.

Sub SubmitBtn_Click(Sender As Object, E As EventArgs)

Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter("select * from Titles where type='" + Category.SelectedItem.Value + "'", myConnection) DS = new DataSet() MyCommand.Fill(ds, "Titles") MyList.DataSource = ds.Tables("Titles").DefaultView MyList.DataBind() End Sub Nombre: Categora: psychology business popular_comp

El control DataGrid proporciona una forma sencilla de visualizar rpidamente resultados de datos mediante una interfaz de usuario tradicional de control de cuadrcula. Como alternativa, los programadores de ASP.NET pueden utilizar el control DataList y una plantilla ItemTemplate personalizada para personalizar informacin de datos, tal y como se muestra en el siguiente ejemplo.

Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter("select * from Titles where type='" + Category.SelectedItem.Value + "'", myConnection) DS = new DataSet() MyCommand.Fill(ds, "Titles") MyList.DataSource = ds.Tables("Titles").DefaultView MyList.DataBind() End Sub Nombre: Categora: psychology business popular_comp



Precio:

Debe observarse que el control permite a los usuarios finales controlar exactamente la estructura y el diseo de cada elemento de la lista (mediante la propiedad de plantillas ItemTemplate). El control tambin controla automticamente el ajuste de contenido en dos columnas (los usuarios pueden controlar el nmero de columnas mediante la propiedad RepeatColumns de la lista de datos). En el siguiente ejemplo se proporciona una visin alternativa del control .

Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter("select * from Titles where type='" + Category.SelectedItem.Value + "'", myConnection) DS = new DataSet() MyCommand.Fill(ds, "Titles") MyList.DataSource = ds.Tables("Titles").DefaultView MyList.DataBind() End Sub

Nombre: Categora: psychology business popular_comp Lista de productos

Debe observarse que el control, el modelo de datos y el usuario de la pgina son los mismos que en el ejemplo anterior. La nica diferencia consiste en que, en este caso, las plantillas alternativas se proporcionan al cdigo de forma declarativa.

Controles de validacin de formularioEl marco de trabajo de la pgina de formularios Web de ASP.NET proporciona un conjunto de controles de servidor de validacin que proporcionan a su vez un modo sencillo a la vez que potente de comprobar errores en los formularios de entrada y, en caso necesario, mostrar mensajes al usuario. Los controles de validacin se agregan a una pgina ASP.NET con otros controles de servidor. Existen controles para tipos concretos de validacin, como la comprobacin de intervalos o la coincidencia de modelos, adems de RequiredFieldValidator, que se asegura de que un usuario omita un campo de entrada. En el siguiente ejemplo se muestra cmo utilizar dos controles en una pgina para validar los contenidos de los controles TextBox y DropDownList.

Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter("select * from Titles where type='" + Category.SelectedItem.Value + "'", myConnection) DS = new DataSet() MyCommand.Fill(ds, "Titles") MyList.DataSource = ds.Tables("Titles").DefaultView MyList.DataBind() End Sub

Nombre: Categora: psychology business popular_comp

Precio:

Debe observarse que los controles de validacin disponen de compatibilidad con clientes de alto y bajo nivel. Los exploradores de alto nivel realizan la validacin en el cliente (mediante JavaScript y DHTML) y en el servidor. Los exploradores de bajo nivel slo realizan la validacin en el servidor. El modelo de programacin de los dos escenarios es idntico. Debe observarse que los programadores de pginas ASP.NET pueden activar opcionalmente la propiedad Page.IsValid en tiempo de ejecucin para determinar si todos los controles de validacin de una pgina son vlidos en ese momento. Esto proporciona un modo simple de determinar si se contina con la lgica empresarial o no. En el siguiente ejemplo se realiza una comprobacin Page.IsValid antes de ejecutar una bsqueda de la categora especificada en la base de datos.

Sub SubmitBtn_Click(Sender As Object, E As EventArgs) If (Page.IsValid) Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter("select * from Titles where type='" + Category.SelectedItem.Value + "'", myConnection) DS = new DataSet() MyCommand.Fill(ds, "Titles") MyList.DataSource = ds.Tables("Titles").DefaultView MyList.DataBind() End If End Sub Nombre:

Categora: psychology business popular_comp

Precio:

Formularios Web de cdigo subyacente

ASP.NET admite dos mtodos para crear pginas dinmicas. El primero es el mtodo que se ha mostrado en los ejemplos anteriores, en el que el cdigo de pgina se declara fsicamente en el archivo .aspx de origen. La forma alternativa (conocida como mtodo de cdigo subyacente) permite que el cdigo de pgina est ms claramente separado del contenido HTML en un archivo completamente independiente. En el siguiente ejemplo se muestra el uso del mtodo de cdigo subyacente para escribir cdigo de pginas ASP.NET.

Nombre: Categora: psychology business popular_comp



Precio:

Resumen de la seccin1. Los formularios Web ASP.NET proporcionan una forma fcil y potente de generar interfaces de usuario Web dinmicas. 2. Las pginas de formularios Web de ASP.NET pueden dirigirse a cualquier explorador cliente (no existe ningn requisito de cookies o de biblioteca de secuencias de comandos). 3. Las pginas de formularios Web de ASP.NET proporciona compatibilidad sintctica con pginas ASP existentes. 4. Los controles de servidor de ASP.NET proporcionan una forma sencilla de encapsular funcionalidades comunes. 5. ASP.NET incluye 45 controles de servidor integrados. Los programadores tambin pueden utilizar los controles generados por otros. 6. Los controles de servidor ASP.NET pueden proyectar automticamente HTML de alto y bajo nivel. 7. Las plantillas ASP.NET proporcionan una forma sencilla de personalizar la apariencia y sensacin de controles de servidor de lista. 8. Los controles de validacin de ASP.NET proporcionan una forma sencilla de realizar validaciones de datos declarativas en el cliente o en el servidor.

Trabajar con controles de servidorEn esta seccin del tutorial, se muestra algunos conceptos bsicos comunes y acciones comunes realizadas por usuarios finales al utilizar controles de servidor ASP.NET en una pgina.

Declarar controles de servidorLos controles de servidor ASP.NET se identifican en una pgina mediante etiquetas declarativas que contienen un atributo runat="server". En el siguiente ejemplo se declaran tres controles de servidor y se personaliza las propiedades de texto y estilo de cada uno por separado.

Declarar controles de servidor Este ejemplo muestra cmo declarar el control de servidor y manipular sus propiedades en una pgina.

Primer mensaje
Segundo mensaje
Tercer mensaje

Manipular controles de servidorSe puede identificar mediante programacin un control de servidor individual de ASP.NET dentro de una pgina proporcionndolo con un atributo id. Se puede utilizar la referencia id para manipular mediante programacin el modelo de objeto del control de servidor en tiempo de ejecucin. En el siguiente ejemplo se muestra cmo puede un programador de pginas establecer una propiedad Text del control en el evento Page_Load.

Sub Page_Load(Sender As Object, E As EventArgs) Message.Text = "Fecha y hora en la que obtuvo acceso por ltima vez a esta pgina: " & DateTime.Now End Sub Manipular controles de servidor Este ejemplo muestra cmo manipular el control de servidor del evento Page_Load para representar la hora actual.

Controlar eventos de accin del control

Los controles de servidor ASP.NET pueden exponer y provocar opcionalmente eventos, que pueden controlar los programadores de pginas. Un programador de pgina puede cumplir con esto mediante la conexin de un evento con un control (en el que el nombre de atributo de un evento indica el nombre del evento y el valor del atributo indica el nombre de un mtodo al que llamar). Por ejemplo, en el siguiente ejemplo de cdigo se demuestra cmo conectar un evento OnClick a un control de botn.

html> Sub EnterBtn_Click(Sender As Object, E As EventArgs) Message.Text = "Hola " & Name.Text & ", esto es ASP.NET" End Sub Administrar eventos de accin de control Este ejemplo muestra cmo obtener acceso al control de servidor del evento "Click" de y utilizar el contenido para modificar el texto de . Escribir su nombre:

Controlar mltiples eventos de accin del controlLos controladores de eventos proporcionan a los programadores de pginas una forma limpia de estructurar lgicamente en una pgina ASP.NET. Por ejemplo, en el siguiente ejemplo se demuestra cmo conectar y controlar cuatro eventos de botn en una nica pgina.

Sub AddBtn_Click(Sender As Object, E As EventArgs) If Not (AvailableFonts.SelectedIndex = -1)

InstalledFonts.Items.Add(New ListItem(AvailableFonts.SelectedItem.Value)) AvailableFonts.Items.Remove(AvailableFonts.SelectedItem.Value) End If End Sub Sub AddAllBtn_Click(Sender As Object, E As EventArgs) Do While Not (AvailableFonts.Items.Count = 0) InstalledFonts.Items.Add(New ListItem(AvailableFonts.Items(0).Value)) AvailableFonts.Items.Remove(AvailableFonts.Items(0).Value) Loop End Sub Sub RemoveBtn_Click(Sender As Object, E As EventArgs) If Not (InstalledFonts.SelectedIndex = -1) AvailableFonts.Items.Add(New ListItem(InstalledFonts.SelectedItem.Value)) InstalledFonts.Items.Remove(InstalledFonts.SelectedItem.Value) End If End Sub Sub RemoveAllBtn_Click(Sender As Object, E As EventArgs) Do While Not (InstalledFonts.Items.Count = 0) AvailableFonts.Items.Add(New ListItem(InstalledFonts.Items(0).Value)) InstalledFonts.Items.Remove(InstalledFonts.Items(0).Value) Loop End Sub Administrar eventos mltiples de accin de control Este ejemplo muestra cmo administrar eventos mltiples de accin de control provocados por controles diferentes . Fuentes disponibles Fuentes instaladas

Roman Arial Black Garamond Somona Symbol Times Helvetica Arial

Realizar desplazamientos de pgina (escenario 1)Desplazamiento por mltiples pginas es un escenario habitual en prcticamente todas las aplicaciones Web. En el siguiente ejemplo se demuestra cmo utilizar el control para desplazarse a otra pgina (pasando parmetros de cadenas de consulta personalizadas por el camino). En el ejemplo se demuestra, pues, cmo obtener acceso fcilmente a dichos parmetros de cadenas de consulta desde la pgina de destino.

Sub Page_Load(Sender As Object, E As EventArgs) Dim RandomGenerator As Random RandomGenerator = New Random(DateTime.Now.Millisecond) Dim RandomNum As Integer

RandomNum = RandomGenerator.Next(0, 3) Select RandomNum Case 0: Name.Text = "Scott" Case 1: Name.Text = "Fred" Case 2: Name.Text = "Adam" End Select AnchorLink.NavigateUrl = "controls_navigationtarget.aspx?name=" & System.Web.HttpUtility.UrlEncode(Name.Text) End Sub Realizar exploracin de pginas (escenario 1) Este ejemplo muestra cmo generar una etiqueta delimitadora HTML que hace que el cliente explore una nueva pgina cuando hace clic en el explorador. Hola hacer clic en este vnculo

Realizar desplazamientos de pgina (escenario 2)No todos los escenarios de desplazamiento de pginas se inician a travs de hipervnculos en el cliente. Las redirecciones y desplazamientos en el cliente tambin puede iniciarlas desde el servidor un programador de pginas ASP.NET llamando al mtodo Response.Redirect(url). Esto suele realizarse cuando se necesita la validacin en el servidor para alguna entrada del cliente antes de que el desplazamiento sea realmente efectivo. En el siguiente ejemplo se demuestra cmo utilizar el mtodo Response.Redirect para pasar parmetros a otra pgina de destino. Tambin se demuestra cmo obtener acceso fcilmente a dichos parmetros desde la pgina de destino.

Sub EnterBtn_Click(Sender As Object, E As EventArgs)

' Navigate to a new page (passing name as a querystring argument) if ' user has entered a valid name value in the If Not (Name.Text = "") Response.Redirect("Controls_NavigationTarget.aspx?name=" & System.Web.HttpUtility.UrlEncode(Name.Text)) Else Message.Text = "Escribir su nombre en el cuadro de texto" End If End Sub Realizar exploracin de pginas (escenario 2) Este ejemplo muestra cmo explorar una nueva pgina desde el evento Click, pasando un valor como argumento de la cadena de consulta (una vez que se ha especificado el valor del cuadro de texto). Escribir su nombre:

Aplicar estilos a controlesEl Web es un entorno flexible para interfaces de usuarios con variaciones extremas en la apariencia y sensacin de diferentes sitios Web. La amplia adopcin de hojas de estilo en cascada (CSS) es la gran responsable de los ricos diseos que se encuentran en el Web. Todos los controles de servidor HTML de ASP.NET y los controles de servidores Web se han diseado para proporcionar compatibilidad de primera clase con los estilos de CSS. En esta seccin se comenta cmo utilizar estilos en unin con controles de servidor y se demuestra el preciso control que se ejerce sobre la apariencia y sensacin de los formularios Web que proporciona.

Aplicar estilos a controles HTMLLas etiquetas HTML estndar admiten CSS a travs de un atributo de estilo que se puede establecer en una lista de pares atributo-valor delimitada por punto y coma. Para obtener informacin acerca de los atributos CSS admitidos por el explorador Internet Explorer, vea pgina Referencia de atributos CSS del sitio Web Workshop de MSDN. Todos los controles de servidor HTML de ASP.NET pueden aceptar estilos exactamente del mismo que las etiquetas HTML estndar. En el siguiente ejemplo se muestra un nmero de estilos ms la modo

aplicados a varios controles de servidor HTML. Si se visualiza el cdigo fuente en la pgina devuelta al cliente, se ver que estos estilos se pasan al explorador del procesamiento del control.

Aplicacin de estilos a controles HTML Intervalo con estilo Texto literal dentro de un control Span con estilo Botn con estilo Hacer clic aqu Entrada de texto con estilo Escriba texto: Entrada de seleccin con estilo Seleccione un elemento: Elemento 1 Elemento 2 Elemento 3 Botones de opcin con estilo Seleccione una opcin: Opcin 1
Opcin 2
Opcin 3

CSS tambin define un atributo de clase que se puede establecer en una definicin de estilo CSS incluida en una seccin ... del documento. Los atributos de clase facilitan la definicin de estilos y la aplicacin de los mismos a varias etiquetas sin tener que volver a definir el mismo estilo. Los estilos de controles de servidor HTML tambin se pueden establecer de esta forma, como se demuestra en el siguiente ejemplo.

.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% } Aplicacin de estilos a controles HTML Intervalo con estilo Texto literal dentro de un control Span con estilo Botn con estilo Hacer clic aqu Entrada de texto con estilo Escriba texto: Entrada de seleccin con estilo Seleccione un elemento: Elemento 1

Elemento 2 Elemento 3 Botones de opcin con estilo Seleccione una opcin: Opcin 1
Opcin 2
Opcin 3

Cuando se analiza una pgina ASP.NET, la informacin de estilo se llena en una propiedad Style (de tipo CssStyleCollection) de la clase System.Web.UI.HtmlControls.HtmlControl. Bsicamente, esta propiedad consiste en un diccionario que expone los estilos del control como coleccin de valores indizada por cadenas para cada clave de atributo de estilo. Por ejemplo, se puede utilizar el siguiente cdigo para establecer y, en consecuencia, recuperar el atributo de estilo width en un control de servidor HtmlInputText.

Sub Page_Load(Sender As Object, E As EventArgs) MyText.Style("width") = "90px" Response.Write(MyText.Style("width")) End Sub

En el siguiente ejemplo se muestra cmo se puede manipular mediante programacin el estilo de un control de servidor HTML mediante la propiedad de coleccin Style.

Sub Page_Load(Src As Object, E As EventArgs) Message.InnerHtml &= "Obteniendo acceso a los estilos..." Message.InnerHtml &= "Color del intervalo: " & MySpan.Style("color") & "
" Message.InnerHtml &= "Ancho del cuadro de texto: " & MyText.Style("ancho") & "" Message.InnerHtml &= "La coleccin de estilos de MySelect es:
" Dim Keys As IEnumerator Keys = MySelect.Style.Keys.GetEnumerator() Do While (Keys.MoveNext()) Dim Key As String Key = CStr(Keys.Current)

Message.InnerHtml &= "" Message.InnerHtml &= Key & "=" & MySelect.Style(Key) & "
" Loop End Sub Sub Submit_Click(Src As Object, E As EventArgs) Message.InnerHtml &= "Modificando estilos..." MySpan.Style("color") = ColorSelect.Value MyText.Style("ancho") = "600" Message.InnerHtml &= "Color del intervalo: " & MySpan.Style("color") & "
" Message.InnerHtml &= "Ancho del cuadro de texto: " & MyText.Style("ancho") End Sub Obtener acceso a estilos mediante programacin Seleccione un color para el control Span: red green blue Control Span con estilo Texto literal dentro de un control Span con estilo Botn con estilo Hacer clic aqu Entrada de texto con estilo Escriba texto: Entrada de seleccin con estilo Seleccione un elemento: Elemento 1 Elemento 2 Elemento 3

Botones de opcin con estilo Seleccione una opcin: Opcin 1
Opcin 2
Opcin 3

Aplicar estilos a controles de servidor WebLos controles de servidor Web proporcionan un nivel adicional de compatibilidad con estilos mediante la adicin de varias propiedades con establecimiento inflexible de tipos para la configuracin del estilo habitual, como el color de fondo y de primer plano, el nombre y tamao de fuente, el ancho, el alto, etc. Estas propiedades de estilo representan un subconjunto de comportamientos de estilo disponible en HTML y se representan como propiedades "planas" expuestas directamente en la clase base System.Web.UI.WebControls.WebControl. La ventaja de utilizar estas propiedades es que proporcionan comprobacin de tipo en tiempo de compilacin y finalizacin de instrucciones en herramientas de programacin como Microsoft Visual Studio .NET. En el siguiente ejemplo se muestra un control WebCalendar al que se aplican varios estilos (se incluye un calendario sin estilos aplicados para comparar). Debe observarse que al establecer una propiedad que es un tipo de clase, como Font, se necesita utilizar la sintaxis de subpropiedad PropertyName-SubPropertyName.

html> Aplicacin de estilos a controles Web Propiedades de estilo Sin estilo: Estilo: (Puede que, el estilo no sea el ms correcto pero al menos los calcetines van a juego...)

El espacio de nombres System.Web.UI.WebControls incluye una clase base Style que encapsula atributos de estilo comunes (clases de estilo adicionales, como TableStyle y TableItemStyle, heredadas desde esta clase base comn). Numerosos controles de servidor Web exponen propiedades de este tipo para especificar el estilo de elementos de procesamiento individuales del control. Por ejemplo, el control WebCalendar expone muchas de esas propiedades de estilo: DayStyle, WeekendDayStyle, TodayDayStyle, SelectedDayStyle, OtherMonthDayStyle y NextPrevStyle. Se pueden establecer propiedades individuales de estos estilos mediante la sintaxis de subpropiedad PropertyName-SubPropertyName, tal y como se muestra en el siguiente ejemplo.

Aplicacin de estilos a controles Web Subpropiedades de estilo

Una sintaxis ligeramente diferente permite que se declare cada propiedad Style como un elemento secundario anidado en etiquetas de control de servidor Web.

En el siguiente ejemplo se muestra una sintaxis alternativa, pero es funcionalmente equivalente al anterior.

Aplicacin de estilos a controles Web Subpropiedades de estilo

Como sucede con los controles de servidor HTML, se pueden aplicar estilos a controles de servidor Web mediante una definicin de clase CSS. La clase base WebControl expone una propiedad String denominada CssClass para establecer la clase de estilo:

.calstyle { position:absolute; left:25%; top:20% } Aplicacin de estilos a controles Web Propiedad CssClass

Si se establece un atributo en un control de servidor que no se corresponde con ninguna propiedad con establecimiento inflexible de tipos, el atributo y el valor se llenan en la coleccin Attributes del control. De forma predeterminada, los controles de servidor procesarn estos atributos no modificados en el HTML devuelto al cliente del explorador solicitante. Esto significa que los atributos de estilo y de clase se pueden establecer directamente en controles de servidor Web en vez de utilizar las propiedades con establecimiento inflexible de tipo. Mientras que esto requiere entender algo del procesamiento real del control, tambin puede constituir una forma flexible de aplicar estilos. Resulta especialmente til con los controles estndar de entrada de formulario, tal y como se muestra en el siguiente ejemplo.

.beige { background-color:beige } Aplicacin de estilos a controles Web Estilos CSS Expando Iniciar sesin: Contrasea: Seleccionar una vista:

Escritorio predeterminado Mi cartera de acciones Mi lista de contactos

Los estilos de controles de servidor Web tambin se pueden establecer mediante programacin con el mtodo ApplyStyle de la clase base WebControl, como en el cdigo que se muestra a continuacin.

Sub Page_Load(Src As Object, E As EventArgs) Dim MyStyle As New Style MyStyle.BorderColor = Color.Black MyStyle.BorderStyle = BorderStyle.Dashed MyStyle.BorderWidth = New Unit(1) MyLogin.ApplyStyle (MyStyle) MyPassword.ApplyStyle (MyStyle) MySubmit.ApplyStyle (MyStyle) End Sub Login: / Password: View: ...

En el siguiente ejemplo se muestra el cdigo anterior.

.beige { background-color:beige }

Sub Page_Load(Src As Object, E As EventArgs) Dim MyStyle As Style MyStyle = New Style() MyStyle.BorderColor = Color.Black MyStyle.BorderStyle = BorderStyle.Dashed MyStyle.BorderWidth = New Unit(1) MyLogin.ApplyStyle (MyStyle) MyPassword.ApplyStyle (MyStyle) MySubmit.ApplyStyle (MyStyle) End Sub Aplicacin de estilos a controles Web Aplicacin de estilos mediante programacin Iniciar sesin: Contrasea: Seleccionar una vista: Escritorio predeterminado Mi cartera de acciones Mi lista de contactos

Resumen de la seccin1. Los controles de servidor HTML de ASP.NET y las familias de controles de servidores Web proporcionan compatibilidad de primera clase con los estilos de CSS.

2. Los estilos pueden aplicarse estableciendo los atributos de estilo o de clase de un control. Se puede acceder a estaconfiguracin mediante programacin a travs de la coleccin Attributes del control. En el caso de controles de servidor HTML, los valores individuales para claves de atributo de estilo se pueden recuperar desde la coleccin Style del control.

3. La configuracin de estilo ms habitual se expone en los controles de servidor Web como propiedades con establecimiento inflexible de tipos del mismo control.

4. El espacio de nombres System.Web.UI.WebControls incluye una clase base Style que encapsula atributos de estilocomunes. Muchos controles de servidor Web exponen propiedades de este tipo para controlar elementos de procesamiento individuales.

5. Los estilos se pueden establecer mediante programacin en controles de servidor Web mediante el mtodo ApplyStyle dela clase base WebControl.

Validacin de formularios de control de servidor Introduccin a la validacinEl marco de trabajo de los formularios Web incluye un conjunto de controles de servidor de validacin que proporcionan un modo sencillo a la vez que potente de comprobar errores en los formularios de entrada y, en caso necesario, mostrar mensajes al usuario. Los controles de validacin se agregan a una pgina de formularios Web con otros controles de servidor. Existen controles para tipos concretos de validacin, como la comprobacin de intervalos o la coincidencia de modelos, adems de RequiredFieldValidator, que se asegura de que un usuario omita un campo de entrada. Se puede adjuntar ms de un control de validacin para un control de entrada. Por ejemplo, se puede especificar que se necesita una entrada y que debe contener un intervalo especfico de valores. Los controles de validacin funcionan con un subconjunto limitado de controles de servidor HTML y Web. Para cada control, una propiedad especfica contiene el valor que se va a validar. En la siguiente tabla se enumeran los controles de entrada que pueden validarse. Control HtmlInputText HtmlTextArea HtmlSelect HtmlInputFile TextBox ListBox DropDownList RadioButtonList Propiedad de validacin Value Value Value Value Text SelectedItem.Value SelectedItem.Value SelectedItem.Value

Tipos de controles de validacinEl formulario de validacin ms sencillo es un campo requerido. Si el usuario introduce cualquier valor en un campo, es vlido. Si todos los campos de la pgina son vlidos, la pgina es vlida. En el siguiente ejemplo se muestra cmo utilizar el control RequiredFieldValidator.

Sub ValidateBtn_Click(sender As Object, e As EventArgs) If (Page.IsValid) Then lblOutput.Text = "Pgina vlida" Else lblOutput.Text = "Algunos campos requeridos estn vacos" End If End Sub Ejemplo simple RequiredField Validator


Informacin de la tarjeta de crdito Tipo de tarjeta: MasterCard Visa * Nmero de tarjeta: * Fecha de caducidad: 06/00 07/00 08/00 09/00 10/00 11/00

01/01 02/01 03/01 04/01 05/01 06/01 07/01 08/01 09/01 10/01 11/01 12/01 *

Tambin hay controles de validacin para tipos de validacin especficos, como la comprobacin de intervalos o la coincidencia de modelos. En la siguiente tabla se enumeran los controles de validacin. Nombre del control RequiredFieldValidator CompareValidator Descripcin Se asegura de que el usuario no omita ninguna entrada. Compara una entrada de usuario con un valor constante o un valor de propiedad de otro control mediante un operador de comparacin (menor que, igual a, mayor qu, entre otros). Comprueba que una entrada de usuario se encuentra entre los lmites superior e inferior especificados. Se pueden comprobar los intervalos entre pares de nmeros, caracteres alfabticos o fechas. Los lmites se pueden expresar como constantes.

RangeValidator

RegularExpressionValidator Comprueba que la entrada coincide con un patrn definido por una expresin regular. Este tipo de validacin permite comprobar secuencias de caracteres previsibles, como las de los nmeros de la seguridad social, las direcciones de correo electrnico, los nmeros de telfono y los cdigos postales, entre otras. CustomValidator Comprueba la entrada del usuario mediante lgica de validacin que codifica el usuario. Este tipo de validacin permite comprobar los valores derivados en tiempo de ejecucin. Muestra los errores de validacin en forma de resumen para todos los validadores de la pgina.

ValidationSummary

Validacin en el cliente

Los controles de validacin siempre realizan una comprobacin de validacin en el cdigo del servidor. No obstante, si el usuario trabaja con un explorador que admite DHTML, los controles de validacin tambin pueden realizar validaciones mediante secuencias de comandos del cliente. Con validacin en el cliente, se detectan algunos errores en el cliente cuando se enva el formulario al servidor. Si resulta que alguno de los validadores es un error, se cancela el envo del formulario al servidor y se muestra la propiedad Text del validador. Esto permite al usuario corregir lo escrito antes de enviar el formulario al servidor. Los valores de campo se revalidan en cuanto el campo que contiene el error pierde el foco, proporcionando as al usuario una rica experiencia de validacin interactiva. Debe observarse que el marco de trabajo de la pgina de formularios Web siempre realiza la validacin en el servidor, incluso cuando ya se ha realizado en el cliente. De esta forma, se evita que los usuarios puedan omitir la validacin mediante la suplantacin de otro usuario o de una transaccin previamente aprobada. La validacin en el cliente se ha habilitado de forma predeterminada. Si el cliente es capaz, la validacin de alto nivel se realiza automticamente. Para deshabilitar la validacin en el cliente, establezca la propiedad ClientTarget de la pgina en "Downlevel" ("Uplevel" fuerza la validacin en el cliente).

Sub Page_Load If Not IsPostBack 'Validate intially to force *s to appear before the first round-trip Validate() End If End Sub Sub ValidateBtn_Click(sender As Object, e As EventArgs) If (Page.IsValid) Then lblOutput.Text = "Pgina vlida" Else lblOutput.Text = "Algunos campos requeridos estn vacos" End If End Sub Ejemplo RequiredFieldValidator de cliente
Informacin de la tarjeta de crdito

Tipo de tarjeta: MasterCard Visa Nmero de tarjeta: Fecha de caducidad: 06/00 07/00 08/00 09/00 10/00 11/00 01/01 02/01 03/01 04/01 05/01 06/01 07/01 08/01 09/01 10/01 11/01 12/01

Visualizar errores de validacinCuando se procesa la entrada del usuario (por ejemplo, cuando se enva el formulario), el marco de trabajo de la pgina de formularios Web pasa la entrada del usuario al control o controles de validacin asociados. Los controles de validacin comprueban la entrada del usuario y establecen una propiedad para indicar si la entrada pas la prueba de validacin. Tras haber procesado todos los controles de validacin, se establece la propiedad IsValid de la pgina; si cualquiera de los controles muestra que se produjo un error en la prueba de la validacin, toda la pgina se establecer como no vlida. Si un control de validacin es un error, un mensaje de error puede aparecer en la pgina por ese control de validacin o en un control ValidationSummary en cualquier otra parte de la pgina. Se visualiza el control ValidationSummary cuando la propiedad IsValid de la pgina es false. Sondea cada control de validacin de la pgina y agrega mensajes de texto expuestos por cada uno. En el siguiente ejemplo se muestra cmo visualizar errores con ValidationSummary.

Sub ListFormat_SelectedIndexChanged(sender As Object, e As EventArgs)

' Change display mode of the validator summary when a new option ' is selected from the "ListFormat" dropdownlist valSum.DisplayMode = ListFormat.SelectedIndex End Sub Ejemplo ValidationSummary Informacin de la tarjeta de crdito Tipo de tarjeta: MasterCard Visa * Nmero de tarjeta: *

Fecha de caducidad: 06/00 07/00 08/00 09/00 10/00 11/00 01/01 02/01 03/01 04/01 05/01 06/01 07/01 08/01 09/01 10/01 11/01 12/01 * Seleccionar el tipo de presentacin de resumen de validacin que desee:

Lista Lista con vietas Un prrafo

Trabajar con CompareValidatorEl control de servidor CompareValidator compara los valores de dos controles. CompareValidator utiliza tres propiedades clave para realizar la validacin. ControlToValidate y ControlToCompare contienen los valores que se van a comparar. Operator define el tipo de comparacin que se va a realizar, como por ejemplo Equal o Not Equal. CompareValidator realiza la validacin mediante la evaluacin de estas propiedades como expresin, tal y como se muestra a continuacin:

( ControlToValidate ControlToCompare )Si la expresin se evala como true, el resultado de la validacin es vlido. El siguiente ejemplo muestra cmo utilizar el control CompareValidator.

Sub Button1_OnSubmit(sender As Object, e As EventArgs) If (Page.IsValid) Then lblOutput.Text = "Resultado: vlido" Else lblOutput.Text = "Resultado: no vlido" End If End Sub Sub lstOperator_SelectedIndexChanged(sender As Object, e As EventArgs) comp1.Operator = lstOperator.SelectedIndex comp1.Validate End Sub Ejemplo CompareValidator Escribir un valor en el cuadro de texto, seleccionar un operador de comparacin y, a continuacin, hacer clic en "Validar" para probar. Cadena 1:

Operador de comparacin: Equal NotEqual GreaterThan GreaterThanEqual LessThan LessThanEqual Cadena 2:

Trabajar con RangeValidatorEl control de servidor RangeValidator prueba si un valor de entrada produce un error en un intervalo dado. CompareValidator utiliza tres propiedades clave para realizar la validacin. ControlToValidate contiene el valor que hay que validar. MinimumValue y MaximumValue definen los valores mximo y mnimo del intervalo vlido. En el siguiente ejemplo se muestra cmo utilizar el control RangeValidator.

Sub Button1_Click(sender As Object, e As EventArgs) rangeValInteger.Validate() If (rangeValInteger.IsValid) Then lblOutput1.Text = "Resultado: vlido" Else lblOutput1.Text = "Resultado: no vlido" End If rangeValDate.Validate() If (rangeValDate.IsValid) Then lblOutput2.Text = "Resultado: vlido" Else

lblOutput2.Text = "Resultado: no vlido" End If rangeValString.Validate() If (rangeValString.IsValid) Then lblOutput3.Text = "Resultado: vlido" Else lblOutput3.Text = "Resultado: no vlido" End If If (Page.IsValid) Then lblOutput.Text = "Resultado: pgina vlida" Else lblOutput.Text = "Resultado: pgina no vlida" End If End Sub Ejemplo RangeValidator Valor para comprobar: Tipo de datos: entero mn.(1), mx(10) Valor para comprobar: Tipo de datos: fecha mn.(2000/1/1), mx.(2001/1/1) Valor para comprobar: Tipo de datos: Mn.(Cerdo hormiguero), mx.(Cebra)


Trabajar con expresiones regularesEl control de servidor RegularExpressionValidator confirma que la entrada coincide con un patrn definido por una expresin regular. Este tipo de validacin permite comprobar secuencias de caracteres previsibles, como las de los nmeros de la seguridad social, las direcciones de correo electrnico, los nmeros de telfono y los cdigos postales, entre otras. RegularExpressionValidator utiliza dos propiedades clave para realizar la validacin. ControlToValidate contiene el valor que hay que validar. ValidationExpression contiene la expresin regular con la que debe coincidir. En el siguiente ejemplo se muestra cmo utilizar el control RegularExpressionValidator.

Sub ValidateBtn_Click(sender As Object, e As EventArgs) If (Page.IsValid) Then lblOutput.Text = "Pgina vlida" Else lblOutput.Text = "Pgina no vlida :-(" End If End Sub

Ejemplo simple RegularExpressionValidator Informacin personal Cdigo postal: El cdigo postal debe tener 5 dgitos numricos

Sub ValidateBtn_Click(sender As Object, e As EventArgs) If (Page.IsValid) Then lblOutput.Text = "Pgina vlida" Else lblOutput.Text = "Pgina no vlida :-(" End If End Sub Ms ejemplos de expresiones regulares Informacin personal Correo electrnico: * Escribir una direccin de correo electrnico vlida Telfono:

* Debe tener el siguiente formato: (XXX) XXX-XXXX Cdigo postal: * El cdigo postal debe tener 5 dgitos numricos

Realizar validaciones personalizadas

El control de servidor CustomValidator llama a una funcin definida por el usuario para realizar validaciones que los validadores estndar no pueden controlar. La funcin personalizada puede ejecutarse en el servidor o en la secuencia de comandos del cliente, como JScript o VBScript. Para una validacin personalizada en el cliente, el nombre de la funcin personalizada debe identificarse en la propiedad ClientValidationFunction. La funcin personalizada debe presentar la siguiente estructura:

function myvalidator(source, arguments)Debe observarse que source es el objeto CustomValidator del cliente, mientras que arguments es un objeto con dos propiedades, Value e IsValid. La propiedad Value es el valor que se validar y la propiedad IsValid es el booleano utilizado para establecer el resultado devuelto de la validacin. Para obtener la validacin personalizada del servidor, coloque la validacin personalizada en el delegado OnServerValidate del validador. En el siguiente ejemplo se muestra cmo utilizar el control CustomValidator.

Sub ValidateBtn_OnClick(sender As Object, e As EventArgs) If (Page.IsValid) Then lblOutput.Text = "Pgina vlida" Else lblOutput.Text = "Pgina no vlida :-(" End If End Sub Sub ServerValidate (sender As Object, value As ServerValidateEventArgs) Try Dim num As Int32 = Int32.Parse(value.Value) If num Mod 2 = 0 Then value.IsValid = True Exit Sub End If Catch exc As Exception End Try value.IsValid = False End Sub Ejemplo CustomValidator

No es un nmero par function ClientValidate(source, arguments) { // even number? if (arguments.Value%2 == 0) arguments.IsValid = true; else arguments.IsValid = false; }

Combinarlo todoEn este ejemplo se muestra un formulario de registro tpico con las variaciones de controles de validacin comentadas en este tema.

Iniciar sesin del ejemplo del formulario de validacin

Informacin de inicio de sesin Direccin de correo electrnico: * La direccin de correo electrnico no es vlida, debe tener el siguiente formato: [email protected]. Contrasea: * La contrasea debe incluir uno de los siguientes caracteres (!@#$%^&*+;:)

Volver a escribir la contrasea: * Los campos de contrasea no coinciden Informacin personal Nombre: Apellido: Direccin:

Estado: Cdigo postal: El cdigo postal debe tener 5 dgitos numricos Telfono: * Debe tener el siguiente formato: (XXX) XXX-XXXX Informacin de la tarjeta de crdito Tipo de tarjeta:

MasterCard Visa * Nmero de tarjeta: * El nmero de la tarjeta de crdito no es vlido, debe contener 16 dgitos. Fecha de caducidad: 06/00 07/00 08/00 09/00 10/00 11/00 01/01 02/01 03/01 04/01

05/01 06/01 07/01 08/01 09/01 10/01 11/01 12/01 * function ccClientValidate(source, arguments) { var cc = arguments.Value; var ccSansSpace; var i, digits, total; // SAMPLE ONLY. Not a real world actual credit card algo. // Based on ANSI X4.13, the LUHN formula (also known as the modulus 10 -- or mod 10 -- algorithm ) // is used to generate and/or validate and verify the accuracy of some credit-card numbers. // Get the number, parse out any non digits, should have 16 left ccSansSpace = cc.replace(/\D/g, ""); if(ccSansSpace.length != 16) { arguments.IsValid = false; return; // invalid ccn } // Convert to array of digits digits = new Array(16); for(i=0; i Contact: Outstanding Balance:

Aunque esta sintaxis se parece al mtodo abreviado de ASP para Response.Write (), su comportamiento es bastante diferente. Mientras que el mtodo abreviado Response.Write de ASP se evalu al procesar la pgina, la sintaxis de enlace de datos de ASP.NET slo se evala cuando se invoca al mtodo DataBind.

DataBind es un mtodo de Page y de todos los controles de servidor. Cuando se llama a DataBind en un control primario, desciende en cascada a todos los controles secundarios de dicho control. As pues, por ejemplo DataList1.DataBind() invoca al mtodo DataBind en cada control de las plantillas de DataList. Al llamar a DataBind en Page (Page.DataBind() o simplemente DataBind()) se provoca que todas las expresiones de enlace de datos de la pgina se evalen. DataBind suele llamarse desde el evento Page_Load, tal y como se muestra en el siguiente ejemplo.

Protected Sub Page_Load(Src As Object, E As EventArgs) DataBind() End Sub

Se puede utilizar una expresin de enlace casi en cualquier parte de la seccin declarativa de una pgina .aspx, suponiendo que evale el tipo de datos esperado en tiempo de ejecucin. Los anteriores ejemplos de propiedad simple, expresin y mtodo muestran texto al usuario cuando se evala. En estos casos, la expresin de enlace de datos debe evaluar a un valor de tipo String. En el ejemplo de la coleccin, la expresin de enlace de datos evala a un valor de tipo vlido para la propiedad DataSource de ListBox. Puede resultar necesario convertir el tipo de valor en la expresin de enlace para producir el resultado deseado. Por ejemplo, si count es de tipo integer:

Number of Records:

Enlazar con propiedades simplesLa sintaxis de enlace de datos de ASP.NET admite enlazar con variables pblicas, propiedades de Page y propiedades de otros controles de la pgina. En el siguiente ejemplo se muestra cmo enlazar con una variable pblica y una propiedad simple de la pgina. Debe observarse que estos valores se inicializan antes de llamar a DataBind().

Sub Page_Load(sender As Object, e As EventArgs) Page.DataBind End Sub ReadOnly Property custID() As String Get Return "ALFKI" End Get End Property ReadOnly Property orderCount() As Integer Get Return 11 End Get End Property Enlace de datos de una propiedad de la pgina Cliente:
rdenes de apertura:

En el siguiente ejemplo se muestra cmo enlazar con una propiedad de otro control.

Sub SubmitBtn_Click(sender As Object, e As EventArgs) ' Rather than explictly pull out the variable from the "StateList" ' and then manipulate a label control, just call "Page.DataBind". ' This will evaluate any expressions within the page Page.DataBind End Sub Enlace de datos de una propiedad de otro control de servidor CA IN KS MD MI OR TN UT Estado seleccionado:

Enlazar con colecciones y listasLos controles de servidor de lista, como DataGrid, ListBox y HTMLSelect, utilizan una coleccin como origen de datos. En los siguientes ejemplos se muestra cmo enlazar con los tipos de coleccin de Common Language Runtime habituales. Estos controles slo se pueden enlazar a colecciones que admiten las interfaces IEnumerable, ICollection o IListSource. Lo ms habitual ser enlazar con ArrayList, Hashtable, DataView y DataReader.

En el siguiente ejemplo se muestra cmo enlazar con ArrayList.

Sub Page_Load(sender As Object, e As EventArgs) If Not IsPostBack Then Dim values as ArrayList= new ArrayList() values.Add ("IN") values.Add ("KS") values.Add ("MD") values.Add ("MI") values.Add ("OR") values.Add ("TN") DropDown1.DataSource = values DropDown1.DataBind End If End Sub Sub SubmitBtn_Click(sender As Object, e As EventArgs) Label1.Text = "Su eleccin: " + DropDown1.SelectedItem.Text End Sub Enlace de datos de DropDownList

En el siguiente ejemplo se muestra cmo enlazar con DataView. Debe observarse que la clase DataView se define en el espacio de nombres System.Data.

Sub Page_Load(sender As Object, e As EventArgs) If Not IsPostBack Then Dim dt As DataTable Dim dr As DataRow Dim i As Integer 'create a DataTable dt = New DataTable dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer))) dt.Columns.Add(New DataColumn("StringValue", GetType(String))) dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime))) dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean))) 'Make some rows and put some sample data in For i = 1 To 9 dr = dt.NewRow() dr(0) = i dr(1) = "Elemento " + i.ToString() dr(2) = DateTime.Now.ToShortTimeString If (i Mod 2 0) Then dr(3) = True Else dr(3) = False End If 'add the row to the datatable dt.Rows.Add(dr) Next dataGrid1.DataSource = new DataView(dt) dataGrid1.DataBind End If End Sub Enlace de datos de DataView

En el siguiente ejemplo se muestra cmo enlazar con Hashtable.

Sub Page_Load(sender As Object, e As EventArgs) If Not IsPostBack Then Dim h As Hashtable = new Hashtable() h.Add ("key1", "valor1") h.Add ("key2", "valor2") h.Add ("key3", "valor3") MyDataList.DataSource = h MyDataList.DataBind End If End Sub Enlace de datos de una tabla Hash :

Enlazar expresiones o mtodosA menudo se desea manipular los datos antes de enlazar con la pgina o con un control. En el siguiente ejemplo se muestra cmo enlazar con una expresin y con el valor devuelto de un mtodo.

Sub Page_Load(sender As Object, e As EventArgs) If Not IsPostBack Then Dim values as ArrayList= new ArrayList() values.Add (0) values.Add (1) values.Add (2) values.Add (3) values.Add (4) values.Add (5) values.Add (6) DataList1.DataSource = values DataList1.DataBind End If End Sub Function EvenOrOdd(number As Integer) As String If (number Mod 2 0) Then Return "Impar" Else Return "Par" End If End Function Enlace de datos de mtodos y expresiones Valor del nmero: Par o impar:

DataBinder.EvalEl marco de trabajo ASP.NET proporciona un mtodo esttico que evala expresiones de enlace de datos enlazadas en tiempo de ejecucin y, de forma opcional, aplica un formato de cadena al resultado. DataBinder.Eval resulta prctico en cuanto a que elimina gran parte de la conversin de tipos explcita que debe realizar el programador para convertir valores en el tipo de datos deseado. Resulta especialmente til al enlazar datos con controles en una lista con plantillas, ya que con frecuencia la fila de datos y el campo de datos deben estar convertidos.

Considrese el siguiente ejemplo, en el que un entero se visualiza como una cadena de moneda. Con la sintaxis de enlace de datos estndar de ASP.NET, se debe realizar primero la conversin del tipo de la fila de datos para recuperar el campo de datos, IntegerValue. A continuacin, se pasa como argumento al mtodo String.Format.

Esta sintaxis puede resultar compleja y difcil de recordar. En contraste, DataBinder.Eval es simplemente un mtodo con tres argumentos: el contenedor que da nombre al elemento de datos, el nombre del campo de datos y una cadena de formato. En una lista con plantillas, como DataList, DataGrid o Repeater, el contenedor que da nombre es siempre Container.DataItem. Page es otro contenedor de nombres que se puede utilizar con DataBinder.Eval.

El argumento de cadena de formato es opcional. Si se omite, DataBinder.Eval devuelve un valor de tipo object, tal y como se muestra en el siguiente ejemplo.

Es importante tener en cuenta que DataBinder.Eval puede conllevar una notable reduccin de rendimiento sobre la sintaxis de enlace de datos estndar ya que utiliza la reflexin en tiempo de ejecucin. DataBinder.Eval debe utilizarse de forma juiciosa, sobre todo cuando no se necesita el formato de cadena.

Sub Page_Load(sender As Object, e As EventArgs) If Not IsPostBack Then Dim dt As DataTable Dim dr As DataRow Dim i As Integer 'create a DataTable dt = New DataTable dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer))) dt.Columns.Add(New DataColumn("StringValue", GetType(String))) dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime))) dt.Columns.Add(New DataColumn("BoolValue", GetType(Boolean))) 'Make some rows and put some sample data in For i = 0 To 8 dr = dt.NewRow() dr(0) = i dr(1) = "Elemento " + i.ToString() dr(2) = DateTime.Now.ToShortTimeString If (i Mod 2 0) Then dr(3) = True Else dr(3) = False

End If 'add the row to the datatable dt.Rows.Add(dr) Next dataList1.DataSource = new DataView(dt) dataList1.DataBind End If End Sub Enlace de datos utilizando DataBinder.Eval Fecha de pedido: Cantidad: Elemento: Fecha de pedido:

Resumen de la seccin1. La sintaxis declarativa del enlace de datos de ASP.NET utiliza la notacin . 2. Se puede enlazar con orgenes de datos, propiedades de la pgina u otro control, colecciones, expresiones y resultados devueltos desde llamadas a mtodos.

3.

Los controles de lista slo se pueden enlazar con colecciones que admiten las interfaces IEnumerable, ICollection o IListSource, como ArrayList, Hashtable, DataView y DataReader.

4.

DataBinder.Eval es un mtodo esttico para enlazar en tiempo de ejecucin. La sintaxis correspondiente puede ser ms simple que la sintaxis de enlace de datos estndar, pero el rendimiento es ms lento.

Acceso a datos en el servidorIntroduccin a los datos del servidorEl acceso a datos es la esencia de cualquier aplicacin del mundo real y ASP.NET proporciona un nutrido conjunto de controles que se integran bien con las API de acceso administrado a datos que proporciona Common Language Runtime. En esta seccin se describen varias iteraciones de un ejemplo que utiliza el control DataGrid de ASP.NET para enlazar con los resultados de consultas SQL y archivos de datos XML. Tambin se supone cierta familiaridad con los fundamentos de bases de datos y el lenguaje de consulta SQL. El acceso a datos en el servidor es exclusivo en cuanto a la ausencia bsica de informacin de estado de las pginas Web, lo que presenta algunas dificultades al intentar realizar transacciones como insertar o actualizar registros a partir de un conjunto de datos recuperados desde una base de datos. Como se ver en esta misma seccin, el control DataGrid puede ayudar a administrar estas dificultades, lo que permite concentrarse ms en la lgica de la aplicacin y menos en los detalles de la administracin del estado y el control de eventos.

Conexiones, comandos y conjuntos de datosCommon Language Runtime proporciona un conjunto completo de interfaces API de acceso a datos administrados para el desarrollo de aplicaciones con un uso intensivo de datos. Estas API ayudan a extraer los datos y a presentarlos de forma coherente sin importar el origen real (SQL Server, OLEDB, XML, entre otros). Bsicamente, hay tres objetos con los que ms se trabaja: conexiones, comandos y conjuntos de datos.

Una conexin representa una conexin fsica a algn almacn de datos, como SQL Server o un archivo XML.

Un comando representa una directiva para recuperar (select) desde el almacn de datos o manipular dicho almacn (insert, update, delete). Un conjunto de datos representa los datos reales con los que trabaja una aplicacin. Hay que tener en cuenta que los conjuntos de datos se encuentran siempre desconectados de la conexin de origen y el modelo de datos correspondiente, y que pueden modificarse de forma independiente. Sin embargo, los cambios que se realizan en un conjunto de datos pueden reconciliarse fcilmente con el modelo de datos originario. Para ver una descripcin ms detallada de la solucin de acceso a datos administrada en Common Language Runtime, lea la seccin Informacin general de ADO.NET de este tutorial.

Obtener acceso a datos basados en SQLUna aplicacin suele necesitar realizar una o ms consultas a la base de datos de SQL en lo que respecta a seleccionar, insertar, actualizar o eliminar. En la siguiente tabla se muestra un ejemplo de cada una de estas consultas. Consulta Seleccin simple Seleccin combinada Insertar Actualizar Eliminar Ejemplo SELECT * from Employees WHERE FirstName = 'Bradley'; SELECT * from Employees E, Managers M WHERE E.FirstName = M.FirstName; INSERT into Employees VALUES ('123-45-6789','Bradley','Millington','Program Manager'); UPDATE Employees SET Title = 'Development Lead' WHERE FirstName = 'Bradley'; DELETE from Employees WHERE Productivity < 10;

Con el fin de proporcionar a la pgina acceso a las clases que se necesitarn para realizar un acceso a datos de SQL, hay que importar los espacios de nombres System.Data y System.Data.SqlClient a la pgina en cuestin.

Para realizar una consulta de seleccin en una base de datos de SQL, es necesario crear SqlConnection para la base de datos pasando la cadena de conexin y, a continuacin, hay que construir un objeto SqlDataAdapter con la instruccin de consulta. Para llenar un objeto DataSet con los resultados de la consulta, hay que llamar al mtodo Fill del comando.

Dim myConnection As New

SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") Dim myCommand As New SqlDataAdapter("select * from Authors", myConnection) Dim ds As New DataSet() myCommand.Fill(ds, "Authors")

Tal y como ya se ha comentado en esta misma seccin, la ventaja de utilizar un conjunto de datos consiste en que proporciona una vista desconectada de la base de datos. Se puede operar con un conjunto de datos de la aplicacin y, posteriormente, cotejar los cambios con la base de datos real. En el caso de aplicaciones cuya ejecucin es de larga duracin, ste suele ser el mejor enfoque. En el caso de aplicaciones Web, se suelen realizar operaciones breves con cada solicitud (normalmente, slo para visualizar los datos). A menudo, no se necesita mantener un objeto DataSet en una serie de varias solicitudes. Para situaciones como stas, se puede utilizar SqlDataReader. SqlDataReader proporciona un puntero de tipo slo hacia delante de slo lectura sobre los datos recuperados desde una base de datos de SQL. Para utilizar SqlDataReader, se declara un SqlCommand en vez de un SqlDataAdapter. SqlCommand expone un mtodo ExecuteReader que devuelve SqlDataReader. Tambin hay que observar que se debe abrir y cerrar explcitamente SqlConnection cuando se utiliza SqlCommand. Despus de una llamada a ExecuteReader, SqlDataReader puede enlazarse a un control del servidor ASP.NET, tal y como se ver en la siguiente seccin.

Dim myConnection As SqlConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") Dim myCommand As SqlCommand = New SqlCommand("select * from Authors", myConnection) myConnection.Open() Dim dr As SqlDataReader = myCommand.ExecuteReader() ... myConnection.Close()

Al ejecutar comandos que no necesitan devolucin de datos, como los de insertar, actualizar y eliminar, tambin se utiliza SqlCommand. El comando se emite llamando a un mtodo ExecuteNonQuery, que devuelve el nmero de filas afectadas. Hay que tener en cuenta que la conexin debe abrirse de forma explcita cuando se utiliza el comando SqlCommand. SqlDataAdapter controla automticamente la apertura de la conexin para el usuario.

Dim myConnection As New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") Dim myCommand As New SqlCommand( _ "UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'", _ myConnection) myCommand.Connection.Open() myCommand.ExecuteNonQuery() myCommand.Connection.Close()

Importante: siempre hay que acordarse de cerrar la conexin en el modelo de datos antes de que se termine de ejecutar la pgina. Si el usuario no cierra la conexin, se puede agotar el lmite de conexin de forma inadvertida mientras se espera a que el recolector de elementos no utilizados controle las instancias de pginas.

Enlazar datos SQL a DataGridEn el siguiente ejemplo se muestra una consulta de seleccin simple enlazada a un control DataGrid. DataGrid procesa una tabla que contiene los datos de SQL.

Sub Page_Load(Sender As Object, E As EventArgs) Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter("select * from Authors", MyConnection) DS = new DataSet() MyCommand.Fill(ds, "Authors") MyDataGrid.DataSource=ds.Tables("Authors").DefaultView MyDataGrid.DataBind() End Sub Seleccin simple del control DataGrid

Al igual que el control DropDownList que se muestra en la seccin Enlace de datos, el control DataGrid admite una propiedad DataSource que toma IEnumerable o ICollection, as como DataSet. Se puede utilizar DataSet asignando la propiedad DefaultView de una tabla incluida en DataSet al nombre de la tabla que se desea utilizar dentro de DataSet. La propiedad DefaultView representa el estado actual de una tabla dentro de DataSet, incluido cualquier cambio que haya realizado el cdigo de la aplicacin (como eliminar filas o cambiar valores). Despus de establecer la propiedad DataSource, se llama a DataBind() para llenar el control.

MyDataGrid.DataSource=ds.Tables("Authors").DefaultView MyDataGrid.DataBind()

Se recurre a una sintaxis alternativa para especificar tanto DataSource como DataMember. En este caso, ASP.NET obtiene automticamente DefaultView.

MyDataGrid.DataSource=ds MyDataGrid.DataMember="Authors" MyDataGrid.DataBind()

Tambin se puede enlazar directamente con SqlDataReader. En este caso slo se muestran datos, por lo que la naturaleza slo hacia delante de SqlDataReader se adapta perfectamente a este escenario y el usuario se beneficia del aumento de rendimiento que proporciona SqlDataReader.

Sub Page_Load(Sender As Object, E As EventArgs) Dim MyConnection As SqlConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") Dim MyCommand As SqlCommand = New SqlCommand("select * from Authors", MyConnection) MyConnection.Open() Dim dr As SqlDataReader = MyCommand.ExecuteReader() MyDataGrid.DataSource = dr MyDataGrid.DataBind() MyConnection.Close() End Sub Seleccin simple del control DataGrid

Nota: en el resto de esta seccin, slo se muestra el modelo DataSet de acceso a datos; no obstante, cualquiera de estos ejemplos puede volver a escribirse para beneficiarse tambin de SQLDataReader.

Realizar una seleccin parametrizadaTambin se puede realizar una seleccin parametrizada mediante el objeto SqlDataAdapter. En el siguiente ejemplo se muestra cmo se pueden modificar los datos seleccionados mediante el valor expuesto desde un control HtmlControl seleccionado.

Sub GetAuthors_Click(Sender As Object, E As EventArgs) Dim DS As DataSet Dim MyConnection As SqlConnection Dim MyCommand As SqlDataAdapter Dim SelectCommand As String = "select * from Authors where state = @State" MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") MyCommand = New SqlDataAdapter(SelectCommand, MyConnection) MyCommand.SelectCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NVarChar, 2)) MyCommand.SelectCommand.Parameters("@State").Value = MySelect.Value DS = new DataSet() MyCommand.Fill(DS, "Authors") MyDataGrid.DataSource=DS.Tables("Authors").DefaultView MyDataGrid.DataBind() End Sub Seleccin con parmetros de un control DataGrid Seleccionar un estado: CA IN KS MD MI OR TN UT

SqlDataAdapter mantiene una coleccin Parameters que puede utilizarse para reemplazar identificadores variables (indicado por un smbolo "@" delante del nombre) con valores. Se agrega un nuevo objeto SqlParameter a la coleccin que especifica el nombre, el tipo y el tamao del parmetro y, a continuacin, se establece la propiedad Value en el valor de la seleccin.

myCommand.SelectCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NVarChar, 2)) myCommand.SelectCommand.Parameters("@State").Value = MySelect.Value

Importante: obsrvese que la propiedad EnableViewState de DataGrid se ha establecido en false. Si se rellenan los datos en cada solicitud, no supone ningn beneficio hacer que DataGrid almacene informacin de estado para que se enve en un viaje de ida y vuelta con devoluciones de formularios. Dado que DataGrid almacena todos los datos cuando se mantiene el estado, es importante desactivarlo en aquellos momentos en los que sea adecuado para mejorar el rendimiento de las pginas. En DataGrid2.aspx, los valores del cuadro de seleccin se llenan estticamente, pero esto no funcionar bien si dichos valores cambian en la base de datos. Dado que el HtmlControl seleccionado tambin admite una propiedad IEnumerable DataSource, se puede utilizar una consulta de seleccin para llenar dinmicamente el cuadro de seleccin, lo que garantiza que la base de datos y la interfaz de usuario estn siempre sincronizadas. En el siguiente ejemplo se muestra este proceso.

Dim MyConnection As SqlConnection Sub Page_Load(Sender As Object, E As EventArgs) MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") If Not (IsPostBack) Dim DS As DataSet Dim MyCommand As SqlDataAdapter MyCommand = New SqlDataAdapter("select distinct State from Authors", MyConnection) DS = new DataSet() MyCommand.Fill(DS, "States") MySelect.DataSource= DS.Tables("States").DefaultView MySelect.DataBind() End If End Sub Sub GetAuthors_Click(Sender As Object, E As EventArgs) Dim SelectCmd As String = "select * from Authors where state = @State" Dim DS As DataSet Dim MyCommand As SqlDataAdapter MyCommand = New SqlDataAdapter(SelectCmd, MyConnection) MyCommand.SelectCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NVarChar, 2)) MyCommand.SelectCommand.Parameters("@State").Value = MySelect.Value

DS = new DataSet() MyCommand.Fill(DS, "Authors") MyDataGrid.DataSource= DS.Tables("Authors").DefaultView MyDataGrid.DataBind() End Sub Seleccin dinmica con parmetros de un control DataGrid Seleccionar un estado:

Insertar datos en una base de datos de SQLPara insertar una fila en una base de datos, se puede agregar a la pgina un formulario de entrada sencillo y ejecutar un comando de insercin en el controlador de eventos de envo de formularios. Al igual que en los dos ejemplos anteriores, se utiliza la coleccin Parameters del objeto de comando para llenar los valores del comando. Hay que tener en cuenta que tambin hay que realizar una comprobacin para asegurarse de que los valores requeridos no son nulos antes de intentar insertarlos en la base de datos. Esto evita una infraccin accidental de las restricciones de campo de la base de datos. El comando de insercin tambin se ejecuta dentro de un bloque try/catch, por si se da el caso de que ya exista la clave primaria de la fila insertada.

Dim MyConnection As SqlConnection Sub Page_Load(Sender As Object, E As EventArgs) MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes")

If Not (IsPostBack) BindGrid() End If End Sub Sub AddAuthor_Click(Sender As Object, E As EventArgs) Dim DS As DataSet Dim MyCommand As SqlCommand If au_id.Value = "" Or au_fname.Value = "" Or au_lname.Value = "" Or phone.Value = "" Message.InnerHtml = "ERROR: los campos id. de autor, nombre o telfono no admiten valores nulos" Message.Style("color") = "red" BindGrid() End If Dim InsertCmd As String = "insert into Authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) values (@Id, @LName, @FName, @Phone, @Address, @City, @State, @Zip, @Contract)" MyCommand = New SqlCommand(InsertCmd, MyConnection) MyCommand.Parameters.Add(New SqlParameter("@Id", SqlDbType.NVarChar, 11)) MyCommand.Parameters("@Id").Value = au_id.Value MyCommand.Parameters.Add(New SqlParameter("@LName", SqlDbType.NVarChar, 40)) MyCommand.Parameters("@LName").Value = au_lname.Value MyCommand.Parameters.Add(New SqlParameter("@FName", SqlDbType.NVarChar, 20)) MyCommand.Parameters("@FName").Value = au_fname.Value MyCommand.Parameters.Add(New SqlParameter("@Phone", SqlDbType.NChar, 12)) MyCommand.Parameters("@Phone").Value = phone.Value MyCommand.Parameters.Add(New SqlParameter("@Address", SqlDbType.NVarChar, 40)) MyCommand.Parameters("@Address").Value = address.Value MyCommand.Parameters.Add(New SqlParameter("@City", SqlDbType.NVarChar, 20)) MyCommand.Parameters("@City").Value = city.Value MyCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NChar, 2)) MyCommand.Parameters("@State").Value = stateabbr.Value MyCommand.Parameters.Add(New SqlParameter("@Zip", SqlDbType.NChar, 5)) MyCommand.Parameters("@Zip").Value = zip.Value MyCommand.Parameters.Add(New SqlParameter("@Contract", SqlDbType.NVarChar,1)) MyCommand.Parameters("@Contract").Value = contract.Value MyCommand.Connection.Open() Try MyCommand.ExecuteNonQuery() Message.InnerHtml = "Registro agregado
" & InsertCmd.ToString() Catch Exp As SQLException If Exp.Number = 2627 Message.InnerHtml = "ERROR: ya existe un registro con la misma clave principal" Else Message.InnerHtml = "ERROR: no se pudo agregar el registro, compruebe que los campos estn rellenos correctamente" End If Message.Style("color") = "red"

End Try MyCommand.Connection.Close() BindGrid() End Sub Sub BindGrid() Dim MyCommand As SqlDataAdapter = new SqlDataAdapter("select * from Authors", MyConnection) Dim DS As DataSet = new DataSet() MyCommand.Fill(DS, "Authors") MyDataGrid.DataSource=DS.Tables("Authors").DefaultView MyDataGrid.DataBind() End Sub Insertar una fila de datos Agregar un nuevo autor: Id. del autor: Apellido: Nombre:

Telfono: Direccin: Ciudad: Estado: CA IN KS MD MI OR TN UT Cdigo postal: Contrato: False True

En vez de comprobar explcitamente los valores de entrada, se podra haber utilizado perfectamente los controles de validacin proporcionados con ASP.NET. En el siguiente ejemplo se muestra cmo hacerlo. Obsrvese que mediante RegEx Validator se proporciona el beneficio adicional de comprobar el formato de los campos del identificador de autor, del cdigo postal y del nmero de telfono.

Dim MyConnection As SqlConnection Sub Page_Load(Sender As Object, E As EventArgs) MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes") If Not (IsPostBack) BindGrid() End If End Sub Sub AddAuthor_Click(Sender As Object, E As EventArgs) Message.InnerHtml = "" If (Page.IsValid) Dim DS As DataSet Dim MyCommand As SqlCommand Dim InsertCmd As String = "insert into Authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) values (@Id, @LName, @FName, @Phone, @Address, @City, @State, @Zip, @Contract)" MyCommand = New SqlCommand(InsertCmd, MyConnection) MyCommand.Parameters.Add(New SqlParameter("@Id", SqlDbType.NVarChar, 11)) MyCommand.Parameters("@Id").Value = au_id.Value MyCommand.Parameters.Add(New SqlParameter("@LName", SqlDbType.NVarChar, 40)) MyCommand.Parameters("@LName").Value = au_lname.Value MyCommand.Parameters.Add(New SqlParameter("@FName", SqlDbType.NVarChar, 20)) MyCommand.Parameters("@FName").Value = au_fname.Value MyCommand.Parameters.Add(New SqlParameter("@Phone", SqlDbType.NChar, 12)) MyCommand.Parameters("@Phone").Value = phone.Value MyCommand.Parameters.Add(New SqlParameter("@Address", SqlDbType.NVarChar, 40)) MyCommand.Parameters("@Address").Value = address.Value MyCommand.Parameters.Add(New SqlParameter("@City", SqlDbType.NVarChar, 20)) MyCommand.Parameters("@City").Value = city.Value MyCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NChar, 2)) MyCommand.Parameters("@State").Value = stateabbr.Value MyCommand.Parameters.Add(New SqlParameter("@Zip", SqlDbType.NChar, 5)) MyCommand.Parameters("@Zip").Value = zip.Value MyCommand.Parameters.Add(New SqlParameter("@Contract", SqlDbType.NVarChar,1)) MyCommand.Parameters("@Contract").Value = contract.Value

MyCommand.Connection.Open() Try MyCommand.ExecuteNonQuer