MoreLab - Mobility Research Lab

Download Report

Transcript MoreLab - Mobility Research Lab

Cliente Ligero en .NET

Tema 4 – ASP.NET

http://paginaspersonales.deusto.es/dipina/MasterISW/

Dr. Diego Lz. de Ipiña Gz. de Artaza

http://paginaspersonales.deusto.es/dipina (Personal) http://www.morelab.deusto.es

(Research Group) http://www.smartlab.deusto.es

http://www.ctme.deusto.es

(Research Lab) (Cátedra de Telefónica Móviles) http://www.tecnologico.deusto.es

(Tecnológico-Fundación Deusto)

ASP.NET

 

Sucesor de Microsoft a la popular plataforma ASP para el desarrollo de aplicaciones web Configuración:

 Atención: Si no funciona, re-registrar ASP.NET bajo IIS:  aspnet_regiis.exe -i 2/126

Ejemplo HTML: simple.html

Hola mundo

3/126

Ejemplo Petición HTTP

GET /simple.html HTTP/1.1

Accept: */* Accept-Language: en-us Accept-Encoding: gzip, deflate If-Modified-Since: Wed, 24 Oct 2001 14:12:36 GMT If-None-Match: "50b0d3ee955cc11:a78" User-Agent: Mozilla/4.0.(compatible; MSIE.6.0; Windows NT 5.1) Host: www.wintellect.com

Connection: Keep-Alive [blank line] 4/126

Ejemplo Respuesta HTTP

HTTP/1.1 200 OK Server: Microsoft-IIS/5.0

Date: Wed, 24 Oct 2001 14:12:37 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Wed, 24 Oct 2001 14:00:53 GMT ETag: "d02acf81975cc11:a78" Content-Length: 46 [blank line] Hola mundo 5/126

ASP.NET vs. ASP

  Active Server Pages (ASP) ofrecen un simple modelo de programación en el que se puede combinar código fuente y de marcado  Provee una serie de objetos prefabricados como Request Response y El código fuente se suele realizar normalmente con VBScript, popular con programadores Visual Basic.

 Este código se coloca entre los delimitadores ‘ <% ’ y ‘ %> ’ 6/126

Ejemplo ASP

Hello ASP App

Hello ASP Application

<%=buildForm()%>
7/126

ASP.NET

 

Los ficheros ASP.NET tienen extensión aspx .

El código en un ASP.NET es muy similar al de ASP con las siguientes diferencias:

 La lógica de la página está codificada en C# o VB.NET. El código es compilado cuando la petición de la página es recibida y se cachea para ser reutilizada  La directiva <%@Import Namespace=“...”%> permite importar espacios de nombres y utilizar el poder de la framework .NET

8/126

Ejemplo ASP.NET

<%@ Page Language="C#"%> <%@ Import Namespace="System.Web.UI"%> Hello ASP.NET App

Hello ASP.NET Application

<%=buildForm()%>
9/126

La clase System.Web.UI.Page

   En el anterior listado encontramos la línea: string firstName = this.Request.Form[“firstName”];  El this en esta sentencia es una referencia a una instancia de System.Web.UI.Page

, objeto que representa a una página ASP.NET

Los objetos Request y Response propiedades de la clase Page de ASP son ahora El siguiente ejemplo muestra algunas de las propiedades de Request 10/126

Usando Page.Request

Page.Response

I y

<%@ Page Language="C#" Debug="true"%> Dump Page Properties

Page Properties

<% dumpProps(); %> 11/126

Usando Page.Request

Page.Response

II y

12/126

Recuperando Datos de Formularios con Request

Propiedades:

 RequestType :  Usando GET recuperaríamos los datos de QueryString  Control=Valor&Control=Valor   Usando POST de la propiedad Form  Request.Form["Direccion"] La propiedad Params incluye además de los datos de un formulario, las cookies y las variables del servidor 13/126

Formulario ASP.NET

  Un elemento FORM en el que no aparece ni action method  Estos atributos son substituidos por runat="server" ni  Indica que el motor ASP.NET debe procesar el contenido del formulario  Controles asp:TextBox , asp:Button y similares Los formularios ASP.NET facilitan el desarrollo de páginas dinámicas  Podemos acceder a los elementos del formulario directamente ( Nombre.Text

), en vez de a través de QueryString o Params .

14/126

Ciclo de Vida del Objeto Page

 Cuando una petición HTTP es recibida ASP.NET responde creando y devolviendo una página   Este proceso genera varios eventos La clase Page contiene varios métodos heredados de System.Web.UI.Control

que se pueden utilizar para manejar estos eventos:     OnInit OnLoad página   inicialización requerida por la página ejecuta acciones comunes a cada petición HTTP de un OnPreRender visualice  para hacer cualquier cosa antes que la página se OnUnload  sirve para realizar tareas como desconectarse de una base de datos cuando la página se descarga 15/126

Manejando Eventos de Página

<%@ Page Language="C#" Debug="true" %> Hello Web Page

Page Events...

16/126

Creando un Directorio Virtual I

 1.

2.

Creamos el directorio virtual ejemplosASP.NET

: Hacemos doble click en Herramientas Administrativas Doble click en Internet Information Services 17/126

Creando un Directorio Virtual II

 3.

Creamos el directorio virtual ejemplosASP.NET

: Hacemos clic con el botón derecho del ratón en Default Web Site y luego seleccionamos New  Virtual Directory 4.

Seleccionamos el directorio donde vamos a dejar los fichero accesibles por el contexto ‘ ejemplosASP.NET

’ 18/126

Web Forms y Server Controls

   Un Web Form es un formulario con el atributo runat="server" que hace que se procese en la parte servidora Un Server Control es un control que también tiene el atributo runat="server" Tanto los web forms como los server controls son procesados en el servidor y generan HTML y JavaScript que son enviados al navegador 19/126

Ejemplo Web Form I

<%@ Page Language="C#" Debug="true" %> 20/126

Ejemplo Web Form II

Hello Web Form

Hello Web Form

21/126

Ejemplo Web Form III

Puntos de interés:

 Declaración del formulario mediante

 En vez de usar HTML usamos etiquetas asp como:  Estas etiquetas corresponden a los controles de la parte servidora  Se transforman en HTML por ASP.NET

22/126

Ejemplo Web Form IV

23/126

Ejemplo Web Form V

   Los controles del servidor preservan su valor a través de peticiones HTTP  Lo hacen guardando las propiedades en un variable de nombre __VIEWSTATE  El valor de __VIEWSTATE es una cadena de caracteres codificada en base-64.

Los controles generan eventos que pueden ser tratados por handlers. Por ejemplo:  El manejador de eventos tiene una firma similar al equivalente en Windows Forms: private void greetHandler(object sender, EventArgs e) { … } Podemos sobrescribir el método OnLoad y también usar el enfoque delegate: protected override void OnLoad(EventArgs e) { base.OnLoad(e); // uso del delegate … greetButton.Click += new EventHandler(greetHandler); } 24/126

Codificación Base 64

 

Subconjunto de 64 caracteres ASCII que permiten a grupos de 6 bits ser representados por un carácter El proceso de codificación representa grupos de 24 bits de entrada (3 bytes de entrada) como un string de salida con 4 bytes de salida (2^6)

Referencia: http://en.wikipedia.org/wiki/Base64

25/126

System.Web.UI.WebControls y System.Web.UI.HtmlControls

  El espacio de nombres System.Web.UI.WebControls

montón de controles, entre ellos:  Button        Calendar CheckBoxList DataGrid DataList DropDownList Label Panel define un  Etc.

En System.UI.HtmlControls

como HtmlAnchor uno-a-uno con la etiqueta HTML equivalente, p.e., HtmlTable y HtmlTable se definen una serie de controles que definen una correspondencia HtmlAnchor y 26/126

System.Web.UI.WebControls y System.Web.UI.HtmlControls

 Al insertar usando el Toolbox de Visual Studio.NET controles HTML obtenemos:    Al insertar web controls obtenemos:       27/126

Propiedades Interesantes de los WebControls

   Estilo Visual  Height y Width   Backcolor y ForeColor BorderColor , BorderStyle y BorderWidth Propiedades de comportamiento  Enabled    Visible AccessKey TabIndex  ReadOnly Generación de Eventos  AutoPostBack  Indica si el control ha de producir automáticamente una nueva solicitud al servidor 28/126

Mantenimiento de Estado en Controles

La propiedad EnableViewState determina si un control ASP.NET debe mantener su estado entre solicitudes

 Su valor por defecto es True 

El campo oculto __VIEWSTATE es el mecanismo utilizado por ASP.NET para conservar estado

29/126

Usando el Control Calendar

.aspx --> <%@ Page Language="C#" Debug="true" %> Calendar ASP.NET App

Calendar ASP.NET Application

30/126

Usando el Control Calendar

31/126

Usando el Control DataGrid I

<%@ Page Language="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> 32/126

Usando el Control DataGrid II

DataGrid ASP.NET App

DataGrid ASP.NET Application

33/126

Usando el Control DataGrid III

   formulario visualiza el DataGrid en el Para cargar datos en el grid, usamos su propiedad DataSource y le asociamos datos invocando a DataBind() DataGrid  soporta paginamiento: PageSize indica el número de filas a visualizar por página  AllowPaging en la página sirve para visualizar botones Previous and Next 34/126

Usando el Control DataGrid III

35/126

Usando DataGrid IV

Una pregunta frecuente suele ser cómo añadir un hiperlink a una de las celdas de un DataGrid:

 http://msdn.microsoft.com/library/default.asp?url=/librar y/en us/vbcon/html/vbtskaddinghyperlinkcolumnstodatagrid webcontrol.asp

36/126

Usando DataGrid V

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="DataGridWithHyperlink.WebForm1" %> WebForm1

37/126

Usando el control HtmlTable I

<%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System"%> <%@ Import Namespace="System.Web.UI"%> 38/126

Usando el control HtmlTable II

HtmlTable Example

HtmlTable Example

Cell#

39/126

Usando el control HtmlTable I

 

La propiedad de una página IsPostBack es falsa cuando un formulario se carga por primera vez Obsérvese cómo programáticamente podemos ir creando la tabla:

 HtmlTable  HtmlRow  HtmlCell 40/126

Controles de Usuario

Podemos crear tres tipos de controles:

 Pagelets  Fragmentos de código HTML que pueden reutilizarse como si de componentes se tratara  Controles simples  Derivados de System.Web.UI.Control

 Controles compuestos  Reutilizan uno o más controles ya existentes  Los especializan 41/126

Creación de Pagelets

    Es un conjunto de marcas HTML alojadas en un archivo independiente y que se pueden reutilizar  Podemos personalizar ese contenido a través de propiedades Se alojan en ficheros con extensión .ascx

Contienen marcado:

Distributed.NET

Tendremos que registrar este fragmento, le damos un nombre y le asociamos un prefijo, en todos los .aspx donde queramos utilizar este control <%@ Register TagPrefix="DN" TagName=“Firma“ Src=“Firma.ascx" %> 42/126

Creación de Pagelets

   <%@ Register TagPrefix="DN" TagName= " Firma " Src= " Firma.ascx

“ %> Si en lugar de tener un archivo .ascx, tuviéramos un control alojado en un ensamblado, substituiríamos src por Assembly Después podríamos incluir el pagelet en cualquier otra página utilizando: runat="server" lo identifica como control del servidor, ASP.NET lo substituirá por el código asociado 43/126

Pagelets con propiedades

  ¿Cómo personalizar un pagelet?

 Tan sencillo como declarar variables públicas Ejemplo:

<%=Text%>

44/126

Pagelets con propiedades

   A continuación incluiríamos el siguiente fragmento en el .aspx donde incluir esta cabecera <%@ Register TagPrefix="DN" TagName= "Cabecera" Src= "Cabecera.ascx" %> Y en el código del .aspx podríamos crear entradas como: Revisar ejemplo en examples\asp.net\SecurityExample 45/126

Creando Controles Web de Usuario con Pagelets

   Permite encapsular dos o más elementos de interfaz en un control reusable  Podemos incluso reutilizar formularios web en controles de usuario Podemos ensamblar formularios agrupando componentes personalizados reutilizables Pasos conversión web form -> user control:  Guardar el formulario con extensión .ascx

 Eliminar todas las sentencias , , , <body> o <form> 46/126</p> <a id="p47" href="#"></a> <h3>Usercolor.ascx</h3> <h3>I</h3> <p><!-- usercolor.ascx --> <script language="C#" runat="server"> public string Color { get { if (colorTextBox.Text == "") return "white"; return colorTextBox.Text; } } public bool Visible { get { return colorPanel.Visible; } set { colorPanel.Visible = value; } } </script> 47/126</p> <a id="p48" href="#"></a> <h3>Usercolor.ascx</h3> <h3>II</h3> <p><asp:panel id="colorPanel" visible="false" runat="server"> <asp:label Font-Name="Verdana" Font-Size="7pt" text="Color : " runat="server"/> <asp:textbox Font-Name="Verdana" Font-Size="7pt" columns="10" id="colorTextBox" runat="server"/> </asp:panel> 48/126</p> <a id="p49" href="#"></a> <h3>Usercolor.ascx</h3> <h3>III</h3> <p>    Este control está compuesto de una label textbox , contenidas dentro de un Panel.</p> <p>y una Definimos dos propiedades públicas para el control: Color y Visible .</p> <p>Para localizar el control en un formulario debemos incluir: <%@ Page Language="C#" Debug="true" %> <%@ Register TagPrefix="userColors" TagName="userColor" Src="usercolor.ascx" %> Para usar el control hacemos: <userColors:userColor id="userColorControl" runat="server"/> 49/126</p> <a id="p50" href="#"></a> <h3>Colorform.aspx</h3> <h3>I</h3> <p><%@ Page Language="C#" Debug="true" %> <%@ Register TagPrefix="userColors" TagName="userColor" Src="usercolor.ascx" %> <script runat="server"> protected override void OnLoad(EventArgs e) { base.OnLoad(e); body.Attributes["bgcolor"] = userColorControl.Color; userColorControl.Visible = !userColorControl.Visible; } </script> <html><head><title>The UserColor Control

The UserColor Control

This form uses the UserColor user control.

When you submit the form the selected color will be used to set the page's background color.

50/126

Colorform.aspx

II

51/126

Custom Controls

     Se diferencian de los controles de usuario en que su código se aloja ya compilado en un ensamblado de tipo DLL Usamos la opción de proyecto Web Control Library Visual Studio.NET para crear un WebControlLibrary1 de A continuación añadimos el proyecto WebApplicationUsingCustomControl Podemos utilizar la paleta de controles para añadir el custom control creado Lo mejor es heredar nuestros controles de clases que derivan de System.Web.UI.Control

como System.Web.UI.WebControls.WebControl

52/126

Custom Control Cabecera de nuevo

 

Podemos o bien reimplementar el método Render() de WebControl que renderiza el contenido de un control O mejor redefinir los métodos:

  AddAttributesToRender() contenidos y atributos RenderContents() base de Render   agrega nuevos invoca a la implementación 53/126

Creando un Control Compuesto con Código

 

No genera su interfaz, se basa en otros controles ya existentes Los controles se añaden al control de usuario en el método CreateChildControls()

54/126

Creando un Control Compuesto con Código

public class WebCustomControl1 : Control, INamingContainer { private TextBox euros, pesetas; protected override void CreateChildControls() { this.euros = new TextBox(); this.pesetas = new TextBox(); euros.Text = "0"; euros.AutoPostBack = true; euros.TextChanged += new EventHandler(Euros_TextChanged); pesetas.Text = "0"; pesetas.AutoPostBack = true; pesetas.TextChanged += new EventHandler(Pesetas_TextChanged); } this.Controls.Add(this.euros); this.Controls.Add(new LiteralControl("€
")); this.Controls.Add(this.pesetas); this.Controls.Add(new LiteralControl("Pts")); private void Euros_TextChanged(object sender, EventArgs e) { pesetas.Text = (Math.Round(Convert.ToDouble(euros.Text) * 166.386)).ToString(); } } private void Pesetas_TextChanged(object sender, EventArgs e) { euros.Text = (Math.Round(Convert.ToDouble(pesetas.Text) / 166.386)).ToString(); } 55/126

Validando la Entrada de Datos

   La plataforma Web Forms provee una selección de controles de validación que sirven para:  Validar la entrada de datos  Mostrar mensajes de error al usuario Todos los controles de validación agregados a una página ASP.NET pasan a formar parte de la colección Validators , que es de sólo lectura  ValidatorCollection es el tipo de la colección  Los validadores derivan todos de BaseValidator Para poner en marcha la validación se invoca el método Validate() de Page   De manera directa A través de los controles con la propiedad CausesValidation 56/126

Validando la Entrada de Datos

 Los controles de validación proporcionados son:       RequiredFieldValidator CompareValidator  propiedad de otro control compara una entrada con un valor o la RangeValidator RegularExpressionValidator  corresponda con una expresión regular requiere que una entrada se CustomValidator   entrada en un rango de valores validación propietaria codificada por usuario ValidationSummary  muestra un resumen de errores de validación para todos los controles de validación en una página 57/126

Validando la Edad I

<%@ Page Language="C#" Debug="true" %> Validating a User's Age

Validating a User's Age

runat="server"/> 58/126

Validando la Edad II




59/126

Validando la Edad III

  Los controles utilizados tienen las siguientes propiedades en común:     controlToValidate ( ageTextBox )  especifica el control a validar errorMessage permite  el texto de error a visualizar enableClientScript  genera JavaScript si el cliente lo display static  los controles de validación son invisibles por defecto, crea espacio para visualizar el error Si cualquier validación es falsa asigna el valor false IsValid .

a 60/126

Validaciones Complejas

   Mediante RegularExpressionValidator CustomValidator y RegularExpressionValidator ValidationExpression tiene la propiedad donde colocaremos una expresión regular Podemos crear nuestra propia función de validación con CustomValidator  Habrá que codificarla en JavaScript y añadirla como un elemento script de HTML  Propiedad esencial ClientValidationFunction 61/126

Validaciones Complejas

HTTP Request Count

HTTP Request Count

<% dumpReqs(); %> 67/126

Creando un Módulo HTTP Propietario IV

68/126

Creando un Manejador HTTP I

    A diferencia de un módulo HTTP, un HTTP handler está diseñado para procesar la petición completamente, y devolver un resultado al navegador Información extra sobre HTTP Modules y Handlers puede encontrarse en: http://support.microsoft.com/default.aspx?scid=kb;EN-US;307985#2 Necesario crear una clase que implementa la interfaz IHttpHander Para instalar el HttpHandler usar las siguientes sentencias en el web.config

: 69/126

Creando un Manejador HTTP II

// file : custhttphandlers.cs

// compile : csc /t:library custhttphandlers.cs

using System.Web; namespace CustomHttpHandlers { public class HelloHandler : IHttpHandler { public void ProcessRequest(HttpContext hc) { hc.Response.Write("Hello, World!"); } } } public bool IsReusable { get { return true; } } 70/126

Creando un Manejador HTTP III

71/126

Haciendo Debugging de Aplicaciones ASP.NET

 Para encontrar problemas en el código de un ASP.NET, éste ofrece dos niveles de testeo:  Page-level tracing  Utiliza la siguiente directiva: <%@ Page Language=“C#” Trace=“true”%>  Para insertar tus propios fragmentos de trace usar las sentencias:  Trace.Write

y Trace.Warn

 Application-level tracing, modificando web.config

72/126

Tracing a Nivel de Página I

<%@ Page Language="C#" Trace="True" %> 73/126

Tracing a Nivel de Página II

Hello Web Form

Hello Web Form

runat="server"/>

74/126

Tracing a Nivel de Página III

75/126

Tracing a Nivel de Aplicación I

 enabled  para activar/desactivar el tracing     localOnly  hacer tracing sólo en localhost pageOutput  true si se pone la información de debugging al final de cada página, o en false en el fichero trace.axd

requestLimit traceMode   cuántos traces de peticiones a guardar si se ordenan por tiempo ( SortByTime ) o categoría ( SortByCategory ) 76/126

Objetos principales de una aplicación ASP.NET

    Response     ( HttpResponse ) Write() WriteFile() BinaryWrite() Redirect() Request ( HttpRequest )     Request y Response QueryString tienen la propiedad Cookies que es una colección ServerVariables Files  ficheros enviados desde el cliente (file uploads)   BinaryRead() SaveAs() Application Session ( ( HttpApplicationState HttpSession ) ) 77/126

Estado de Aplicación en Global.Asax

   Los objetos de aplicación son compartidos por todas las sesiones y viven la duración completa de una aplicación  Se crean e inicializan en el fichero global.asax

La principal ventaja de los objetos a nivel de aplicación es que una vez que ocurre la primera petición, todas las aplicaciones tienen acceso al objeto Como puede haber acceso concurrente a los datos, si hay necesidad de cambiarlos hay que usar Locks : Application.Lock(); Application[“someVar”] = someVal; Application.UnLock(); 78/126

Global.Asax

<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> 79/126

dumpTitles.aspx I

<%@ Page Language="C#" Debug="true"%> Application State

Application State

<% dumpTitles(); %> 80/126

dumpTitles.aspx II

81/126

Gestionando la Sesión I

   Session es una propiedad pública de System.Web.UI.Page y System.Web.Services.WebService

Guardamos y recuperamos estado de sesión como sigue: int numRequests = (int)Session[“numRequests”]; ...

Session[“numRequests”] = ++numRequests; Una sesión comienza cuando un usuario visita la aplicación y acaba cuando la sesión expira 82/126

Gestionando la Sesión II

El significado de estos atributos es el siguiente:      mode  Off para no permitir sesiones, InProc sesión en el mismo proceso, StateServer para guardar la información de remotamente o SqlServer en una BD cookieless URL timeout   true para sesiones sin cookies, añadiría identificador de usuario a minutos que una sesión estará inactiva hasta que es abandonada stateConnectionString sqlConnectionString   por ejemplo: 127.0.0.1:42424 el string de conexión de SQL Server 83/126

Ejemplo Redirect y Session

  Login.aspx

: void Page Load(object sender, EventArgs e) { if (IsPostBack) { Session[“Nombre”] = Nombre.Text; Session[“Dirección”] = Direccion.Text; Response.Redirect(“Confirmation.aspx”); } } Confirmation.aspx

void Page Load(object sender, EventArgs e) { Response.Write(“Activar subscripción ” + Session[“Nombre”]); } 84/126

Usando Visual Studio 2005

   Vamos a crear una aplicación web que codifica strings a Base64 Lanza Visual Studio.NET y selecciona F ile|New|Project … Visual C# Projects  ASP.NET Web Application  Llama a la aplicación BAse64App Automáticamente se crea un Directorio Virtual y se colocarán los ficheros en c:\InetPub\wwwroot\Base64App 85/126

Usando Visual Studio 2005

    Visual Studio.NET separa el formulario web y el código detrás del formulario Lo hace a través del atributo CodeBehind : <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Base64App.WebForm1" %> Usamos la ToolBox en la siguiente figura para generar un formulario como el que aparece Crea un fichero de configuración especial denominado Web.config

86/126

Usando Visual Studio.NET

III

87/126

Usando Visual Studio.NET

IV

private void EncodeButton_Click(object sender, System.EventArgs e) { if (base64TextBox.Text == "") { this.EncodedLabel.Text = ""; } else { System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding(); byte[] b = ascii.GetBytes((string)base64TextBox.Text); this.EncodedLabel.Text = "ENCODED: " + Convert.ToBase64String(b); } } private void DecodeButton_Click(object sender, System.EventArgs e) { if (base64TextBox.Text == "") { this.DecodedLabel.Text = ""; } else { byte[] b = Convert.FromBase64String(base64TextBox.Text); System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding(); this.DecodedLabel.Text = "DECODED: " + ascii.GetString(b); } } 88/126

Usando Visual Studio.NET

V

89/126

Creando Manualmente Formularios con Code Behind I

<%@ Page Language="C#" Inherits="BehindForm" Src="behindform.cs" %> Hello Web Form

Hello Web Form (Code-Behind Version)

90/126

Creando Manualmente Formularios con Code Behind II

// file : behindform.cs

using System; using System.Web.UI; using System.Web.UI.WebControls; public class BehindForm : Page { protected TextBox firstNameTextBox; protected Label greetingLabel; // greet the user...

protected void greetHandler(object sender, EventArgs e) { } } firstNameTextBox.Text = firstNameTextBox.Text.Trim(); if (firstNameTextBox.Text == "") { // no name, so no greeting...

greetingLabel.Text = ""; } else { // greet the user...

greetingLabel.Text = "Hello, " + firstNameTextBox.Text + "!"; } 91/126

Creando Manualmente Formularios con Code Behind III

92/126

Creando gráficos “on-the-fly”

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Drawing" %> <%@ Import Namespace="System.Drawing.Imaging" %>

// Lo pasamos como respuesta Grafico.Save(Response.OutputStream, ImageFormat.Jpeg); 93/126

Creando gráficos “on-the-fly”

94/126

Ejemplo ASP.NET con ADO.NET(Access)

// examples\ADOAccessASPX public class WebForm1 : System.Web.UI.Page

{ private void Page_Load(object sender, System.EventArgs e) { OleDbConnection conexion = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+"Data Source=F:\\Deusto\\Distributed.NET\\examples\\ado.net\\pubs.mdb"); OleDbCommand comando = new OleDbCommand("SELECT * FROM TITLES", conexion); OleDbDataAdapter adaptador = new OleDbDataAdapter(comando); DataSet conjunto = new DataSet(); adaptador.Fill(conjunto, "Publicaciones"); Response.Write("Hay " + conjunto.Tables["Publicaciones"].Rows.Count + " filas
"); foreach (DataRow fila in conjunto.Tables["Publicaciones"].Rows) { Response.Write(fila["title_id"] + " - " + fila["title"] + "
"); } } } 95/126

Componentes ASP específicos de Datos

   Cualquier control puede tomar valores de un BBDD mediante la expresión: Otros controles más sofisticados tienen la propiedad DataBindings Vamos a extender el ejemplo anterior para rellenar una Label valores de una BBDD  Es necesario invocar al método DataBind() de Page  con Colocar un Label con la ayuda de Visual Studio.NET y asociar a la propiedad DataBindings , la expresión:  Conjunto.Tables["Publicaciones"].Rows[0].["Titulo"] 96/126

Listas, cuadrículas y plantillas

    Vamos a ver como asociar fuentes de datos a controles con capacidad para visualizar múltiples filas:     ListBox DropDownList CheckBoxList DataGrid  Repeater  DataList A través de las propiedades DataSource vista y DataMember podemos asociar una tabla o ListBox , DropDownList columna en distintas filas  Tienen las propiedades DataTextField Repeater y DataList y DataValueField se basan en la repetición de plantillas de elementos  y CheckBoxList asocian los valores de una misma <%# DataBinder.Eval(Container.DataItem, "Title") %> 97/126

Paginación

  Los controles Repeater paginación de serie  y DataList no ofrecen Se debe implementar bien manualmente o a través del componente PagedDataSource El control DataGrid se apoya en PagedDataSource para automatizar la paginación  Dando True a AllowPaging activamos la paginación  Debemos gestionar el evento PageIndexChanged , donde asociaremos el DataGrid al origen de datos 98/126

Seguridad en ASP.NET

 Intervienen 3 níveles:  La comunicación entre un navegador y el motor ASP.NET se produce a través de un servidor web, IIS   El primer nivel de seguridad radica en el filtrado de peticiones que se puede efectuar por el IIS El segundo escalón de seguridad es el impuesto por ASP.NET

 La información de seguridad global y local se guarda en los ficheros Web.config

 El tercer nivel de seguridad viene dado por NTFS 99/126

Configuración de IIS

    Con la ayuda del inetmgr    podemos configurar: Un sitio web completo Carpeta virtual asociada a una aplicación Una de sus subcarpetas  Archivo individual Normalmente tendremos marcada la opción “Acceso anónimo” Si queremos identificar individualmente a un usuario usaríamos desactivaríamos el acceso anónimo   Tendríamos “Autenticación de Windows Integrada”  Podríamos seleccionar Autenticación Básica adecuada para intranets Para instalar soporte de ASP.NET en IIS ejecutar el comando:  aspnet_regiis -ir -enable 100/126

Configuración de IIS

101/126

Seguridad y NTFS

   Una vez que IIS haya identificado adecuadamente al usuario, anónimo o específico, delegará a NTFS La combinación de permisos asignados a un fichero, mediante el Explorador de Windows, junto con la identidad asignada al usuario que efectúa la solicitud por IIS determinará si el documento solicitado puede devolverse Hasta este punto el motor ASP.NET no habrá intervenido.

102/126

El Archivo de Configuración Web.config

   Para una app de uso en Intranet la configuración de IIS y autorización de acceso a los archivos será suficiente Para acceso vía Internet es mejor configurar IIS con acceso anónimo y delegar la autenticación en ASP.NET

Muchos aspectos del funcionamiento de ASP.NET están establecidos en:   Los varios ficheros Web.config

Machine.config, sus parámetros afectan globalmente al funcionamiento de ASP.NET

103/126

Configuración de Seguridad en Machine.config

  En mi sistema este fichero se encuentra en: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG Su contenido principal en cuanto a seguridad está dividido en tres apartados, que indicar cómo identificar usuarios, la representación del usuario y su autorización: 104/126

Métodos de Identificación

 El elemento authentication establece el método de identificación que usará ASP.NET:     None  acceso abierto Windows Windows  ASP.NET utilizará la identificación integrada de Forms  prescinde de la autorización de Windows y utiliza un formulario web para identificar al usuario Passport  ASP.NET utilizará el SDK de Windows Passport 105/126

Autorización de Acceso

   Se configura a través del elemento authorization Por cada documento solicitado se comprobará una lista de concesiones y negaciones representadas por los elementos allow deny .

y Cada elemento allow  o deny consta de los tres atributos siguientes: users : enumerará los usuarios a los que se otorgo o deniega la autorización de acceso   roles : con este atributo se autoriza o deniega el acceso a perfiles, grupos de usuarios representados por un nombre verbs : permite indicar el método de solicitud GET o POST 106/126

Representación del Usuario

Los atributos del elemento deberá tomar ASP.NET: identity determinarán qué personalidad de qué usuario

 impersonate : indica si ASP.NET (true) debe o NO (false) debe representar al usuario  userName : el nombre de la cuenta a usar  password : la contraseña del userName 107/126

La interfaz IPrincipal

   Cuando se produce la identificación de un usuario, ASP.NET crea un objeto que implementa Iprincipal WindowsPrincipal y GenericPrincipal implementaciones de esta interfaz La interfaz IPrincipal   Identity IsInRole son dos expone dos miembros: 108/126

Ejemplo SecurityExample

   Revisarlo en examples/SecurityExample Este ejemplo presenta al usuario un formulario de login y le redirecciona a la página del portal cuando el login es correcto Se han utilizado contraseñas en plano   passwordFormat podría tener el formato MD5 y SHA1 Podríamos obtener sus valores a FormsAuthentication.PasswordForStoringInConfigFil

e() 109/126

Seguridad en ASP.NET

http://msdn.microsoft.com/library/default.asp?url=/ library/en-us/dnnetsec/html/secnetlpmsdn.asp

110/126

ASP.NET 2.0

 Las novedades que proporciona son:     Productividad del desarrollador   Implementan patrones de uso comunes Gestión y Administración  Precompilación de páginas  Nuevo controles Mejor tolerancia a fallos Rapidez y Rendimiento  Mejores técnicas de caching Para más detalles: http://www.asp.net/whidbey/whitepapers/AspNetOverview.aspx?ta

bindex=0&tabid=1 111/126

AJAX y ASP.NET

Revisar concepto AJAX

112/126

Novedades ASP.NET 2.0

Novedades en todas aquellas áreas comunes en toda aplicación web:

 Productividad  Nuevos controles  Flexibilidad y extensibilidad  Rendimiento  Securidad 113/126

Novedades ASP.NET 2.0

  Objetivos:    Incrementar la productividad Eliminar la complejidad Permitir que la construcción de páginas web sea mucho más sencilla Mejoras:     Trabajando con datos Diseño de páginas consistente Seguridad y Personalización Nuevos controles 114/126

Trabajando con Datos

   Nuevos controles de acceso a datos como SqlDataSource Nuevos controles web para visualizar datos: GridView , DetailsView , FormView  Soportan ordenación y paginado Ejemplo sencillo que permite visualizar los datos de una BBDD en una tabla:

Diseño de Páginas Consistente

     Páginas maestras:  Permiten crear el formato de todas tus páginas como una sola plantilla y luego insertar el contenido en cada página   El webcontrol ContentPlaceHolder define una región de la página maestra que puede substituirse con contenido de la página asociada En la página que usa el Maestro poner <%@ Page MasterPageFile="Site.master" %>  Dentro de la página usar elementos asp:Content  Incluye cabeceras, imágenes menús y otro contenido que luego se puede cambiar para modificar la apariencia de todo un portal Controles:   Controles Menu y TreeView para proveer un menú visible en la página SiteMapPath , indica la posición de la página actual entre la jerarquía de páginas Otros controles: SiteMapDataSource e ImageMap Otros aspectos: temas, soporte para accesibilidad e internacionalización Ejemplo: GridViewMasterDetailsInsert.aspx

116/126

Seguridad e Internacionalización

      Control Login contraseña que visualiza el nombre de usuario y Controles LoginName y LoginStatus nombre y estado del usuario actual visualizan el Control PasswordRecovery visualiza un Asistente para recuperar la password de un usuario Usa plantillas con el control LoginView para visualizar información dependiendo del estado del usario Soporte para la personalización WebParts permiten crear bloques de UI reutilizables 117/126

Nuevos Controles

Tales como:

 HtmlHead , HtmlTitle , HtmlLink , HtmlPassword , HtmlInputReset y HtmlInputSubmit  FileUpload  BulletedList  HiddenField  MultiView y View permiten hacer que partes de una página se muestren o desaparezcan 118/126

Control GridView

  El control GridView es un control de asociación de datos en ASP.NET 2.0 para renderizar datos en forma tabular  Cada fila corresponde a un registro de datos y las columnas corresponden a los campos del registro  GridView es un reemplazo del control DataGrid Soporta las siguientes características: de ASP.NET 1.x

       Asociando a controles de datos Capacidad de ordenamiento, actualización, paginado, selección de filas y borrado integradas Acceso programático al GridView para cambiar sus propiedades y eventos Nuevos tipos de columnas como CheckBoxField e ImageField . Campos de datos múltiples para columnas con hipervínculo Campos clave múltiples para selección, actualización y borrado Apariencia personalizable a través de temas y estilos 119/126

Strings de Conexión

  SqlDataSource referencia un string de conexión a base de datos mediante un nombre usando una nueva sintaxis declarativa in ASP.NET 2.0.

 El string de conexión es guardado en el fichero Web.config bajo el elemento , por lo que es fácilmente mantenido para todas las páginas en una aplicación  Ejemplo: La configuración de strings en Web.config es una buena práctica recomendada para cualquier aplicación ASP.NET tanto para gestión centralizada como por motivos de seguridad 120/126

Ordenación y Paginado

   El control  SqlDataSource permite ordenación cuando: Su propiedad DataSourceMode está asociada a DataSet En un GridView:  Para ordenación hay que poner su propiedad AllowSorting true.

 Para paginado AllowPaging  a true. Se pueden personalizar los estilos y configuración del paginado mediante PagerStyle y PagerSettings .

a Ejemplos: GridViewXXX.aspx

121/126

Aplicando Estilos, Temas y Pieles

   Estilos en controles Option 2
Temas y Pieles  Permiten factorizar información de estilo y layout en un grupo separado de ficheros, denominado Tema.

 Un Tema puede aplicarse a cualquier site para afectar el look and feel de sus páginas y controles  Los cambios de estilo pueden simplificarse por centralizarse en un único fichero.

Ejemplo: StyledCalendar.aspx  <%@ Page Language="C#" Theme="ExampleTheme" %> 122/126

Beneficios de los Temas

     Beneficios:   Permite especificar estilos en tu portal separadamente de tu página y aplicación Se puede diseñar una página sin estilos y luego aplicarse más tarde  Pueden descarse y aplicarse estilos provenientes de otras partes Un fichero de piel contiene definiciones de controles, cuyas definiciones automáticamente sobrescriben el valor de la propiedad local en una página en la que se aplique el tema.

Por ejemplo:  causará que todos los controles calendario en páginas a las que se ha asociado el tema se muestren con Un fichero de skins contiene normalmente una definición por cada control, no incluir el atributo ID. Ejemplo: ThemedASP_Pages.aspx

123/126

Controles WebPart

    Permiten añadir contenido personalizado, de formato y rico, manipulable desde tu página, a tu portal Web Part Controls  Layout dinámico y modular, contenido personalizado Basados en los servicios de personalización de ASP.NET 2.0

Cualquier control puede convertirse facilmente en un Webpart.

Ejemplo: WebPartPageMenu.ascx y WebPart.aspx

124/126

Otros aspectos

    El directorio App_Code permite compartir código entre varias páginas Redirigiendo a otra página: Response.Redirect("Controls_NavigationTarget_cs.aspx?name=" + System.Web.HttpUtility.UrlEncode(Name.Text)); SiteMapPath, menús y treeviews Creating the Application Services Database for SQL Server  aspnet_regsql.exe -E -S localhost\SQLExpress -A mr 125/126

Referencias

New features for web developers in ASP.NET 2.0

 http://dnjonline.com/article.aspx?ID=dotNET2_webapp s 

ASP.NET 2.0 QuickStart Tutorial

  http://quickstarts.asp.net/QuickStartv20/aspnet/

Internacionalización en ASP.NET

 http://www.c sharpcorner.com/UploadFile/mosessaur/aspnetlocalizat ion02042006165851PM/aspnetlocalization.aspx?Article

ID=96602e53-0fb1-44ec-a67b-1c68b05eb2e1 126/126