Edgar Sánchez Logic Studio Director Regional de Microsoft para Ecuador De ASP.NET 1.1 a ASP.NET...

Post on 23-Jan-2016

216 views 0 download

Tags:

Transcript of Edgar Sánchez Logic Studio Director Regional de Microsoft para Ecuador De ASP.NET 1.1 a ASP.NET...

Edgar SánchezLogic StudioDirector Regional de Microsoft para

Ecuador

De ASP.NET 1.1 a ASP.NET 2.0De ASP.NET 1.1 a ASP.NET 2.0

Un vistazo a las nuevas característicasUn vistazo a las nuevas características

Controles dedatos

Controles dedatos

Controles delogin

Controles delogin Partes webPartes web Otros controles

nuevosOtros controles

nuevos

Páginas maestrasPáginas maestras Temasy Pieles

Temasy Pieles

Mobilidad ylocalizaciónMobilidad ylocalización CompilaciónCompilación

MembresíaMembresía Administraciónde roles

Administraciónde roles PerfilesPerfiles ConfiguraciónConfiguración

Mapas del sitioMapas del sitio Monitoreode salud

Monitoreode salud Otros serviciosOtros servicios

Con

trole

sFr

am

ew

ork

de P

ág

ina

Serv

icio

sy A

PIs

Novedades en el acceso a datosNovedades en el acceso a datos

Controles “Data source”Data binding declarativo bidireccional

Controles de datosGridView – Como el DataGrid, pero mejoradoDetailsView – El compañero de GridView

Dependencias de cache SQLAtar ítems de cache a entidades de base de datos

Expresiones de data binding simplificadas

Data binding de ASP.NET 1.xData binding de ASP.NET 1.x<asp:DataGrid ID="MyDataGrid" RunAt="server" /> ...<script language="C#" runat="server">void Page_Load (Object sender, EventArgs e){ SqlConnection connection = new SqlConnection ("server=localhost;database=pubs;integrated security=true"); try { connection.Open (); SqlCommand command = new SqlCommand ("select title_id, titles, price from titles"); MyDataGrid.DataSource = command.ExecuteReader (); MyDataGrid.DataBind (); } finally { connection.Close (); }}</script>

Data binding de ASP.NET 2.0Data binding de ASP.NET 2.0<asp:SqlDataSource ID="Titles" RunAt="server" ConnectionString="server=localhost;database=pubs;integrated security=true" SelectCommand="select title_id, title, price from titles" /><asp:DataGrid DataSourceID="Titles" RunAt="server" />

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Data binding declarativoData binding declarativo

Novedades en la interfaz de usuarioNovedades en la interfaz de usuarioPáginas maestras

“Herencia visual" para páginas WebSe aplica declarativa o programáticamente

Temas y pielesPoner temas a controles, páginas o sitios enterosSe aplica declarativa o programáticamente

Nuevos controles (más de 50 en total)Menus, TreeViews, Wizards y más

Como poner tema a una páginaComo poner tema a una página<%@ Page Theme="BasicBlue">

Antes Después

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Páginas maestrasPáginas maestras

Novedades en seguridadNovedades en seguridad

Servicio de membresíaServicio para administrar usuarios y credencialesBasado en proveedores para tener almacenamiento flexible

Controles de loginControles para logging, creación de nuevos usuarios, recuperación de claves y más

Servicio de administración de rolesCombinación de autenticación con formas y autorización basada en roles ¡sin escribir código!

Validación de loginsValidación de loginsif (Membership.ValidateUser (UserName.Text, Password.Text)) RedirectFromLoginPage (UserName.Text, RememberMe.Checked);

El control de loginEl control de login<html> <body> <form runat="server"> <asp:Login RunAt="server" /> </form> </body></html>

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Membresía y loginsMembresía y logins

PerfilesPerfiles

Almacenar datos personales persistentementeAcceso con tipos fuertes (a diferencia del estado en la sesión)Búsqueda por demanda (a diferencia del estado en la sesión)Persistente (a diferencia del estado en la sesión)Soporta usuarios anónimos y autenticados

Acceso a través de derivados de HttpProfileBase compilados dinámicamente (HttpProfile)Basado en proveedores lo que permite almacenamiento flexible

Definición de un perfilDefinición de un perfil<configuration> <system.web> <profile> <properties> <add name="ScreenName" /> <add name="Posts" type="System.Int32" defaultValue="0" /> <add name="LastPost" type="System.DateTime" /> </properties> </profile> </system.web></configuration>

Uso de un perfilUso de un perfil// Increment the current user's post countProfile.Posts = Profile.Posts + 1;

// Update the current user's last post dateProfile.LastPost = DateTime.Now;

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Persistencia de datos con perfilesPersistencia de datos con perfiles

Navegación del sitioNavegación del sitio

Las IU de navegación son tediosas de implementarEspecialmente si se basan en scripts en el cliente

Nuevos controles simplifican la navegación del sitio

TreeView y Menu – IU de navigaciónSiteMapDataSource – Mapas XML del sitioSiteMapPath – Control de “rastro de migas"

Una API pública provee el fundamento para los controlesBasado en proveedores para mayor flexibilidad

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Navegación en el sitio dirigida por datosNavegación en el sitio dirigida por datos

ProveedoresProveedores

Nuevo modelo para almacenar y administrar el estado

Hace al almacenamiento adaptable a diferentes medios

Usado por muchos servicios clave de ASP.NET

Servicio de membresíaServicio de administración de roles y más

Los proveedores pre-construidos hacen el almacenamiento del estado de ASP.NET muy flexibleLos proveedores personalizados lo hacen infinitamente flexible

El modelo de proveedoresEl modelo de proveedores

API de membresía

Datos demembresía

Access Otros almacenesde datos

Controles LoginLogin LoginStatusLoginStatus LoginViewLoginView

AccessMembershipProviderAccessMembershipProvider Otros proveedoresde membresía

Otros proveedoresde membresía

Proveedores de membresía

MembershipMembership MembershipUserMembershipUser

SqlMembershipProviderSqlMembershipProvider

SQL Server

Otros controlesde login

Otros controlesde login

ConfiguraciónConfiguración

Herramientas administrativasSnap-in de MMC para ASP.NETHerramienta de administración del sitio web (Webadmin.axd)

API de configuraciónAcceso de lectura/escritura a los settings de configuraciónSecciones personalizadas de configuración más simples

InstrumentaciónContadores de rendimiento, monitoreo de salud y más

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Herramienta de administración del sitio webHerramienta de administración del sitio web

Partes webPartes web

Framework para la construcción de aplicaciones estilo portal

Sigue el patrón de SharePoint Portal ServerSystem.Web.UI.WebControls.WebParts

IUs ricas con un mínimo de códigoEdición de la distribución de la página usando arrastrar-y-soltarEdición de la apariencia, el comportamiento y más

Personalización sin problemasIntercomunicación (“conexiones”)

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Partes webPartes web

Novedades en movilidadNovedades en movilidad

Arquitectura de controles unificadaLos adaptadores permiten a las páginas y los controles presentar las etiquetas en diferentes tipos de dispositivosAdaptadores WML provistos por terceros

Filtros de dispositivos

<asp:Label Text="Hello, world" RunAt="server" Nokia:Text="Hello, Nokia" Up:Text="Hello, OpenWave" />

Navegadores Nokia

Navegadores OpenWave

Novedades en localizaciónNovedades en localización

Manejo de Auto-culturaMapeo declarativo de las cabeceras Accept-Language a las propiedades relevantes de la hebra

Manejo de recursos simplificadoMapeo declarativo de propiedades de los controles a recursos usando expresiones <%$ … %>Carga de recursos programática usando tipos fuertes

<asp:localize runat="server"> y más

Novedades en compilaciónNovedades en compilación

Autocompilación de cualquier recursoArchivos CS, archivos VB, archivos RESX, etc.Basta poner los archivos en directorios especialesExtensible mediante proveedores personalizados

Nuevo modelo de código-detrás (code-behind 2.0)

Corrige fragilidades de la versión 1Basado en el soporte de clases parciales de los compiladores

Precompilación e instalación sin el código fuente

Compilación dinámicaCompilación dinámica

vroot

Code

Resources

CS

VB

WSDL

XSD

RESX

RESOURCE

Archivos auto-compilados en el primer acceso

Proveedores de construcciónProveedores de construcción

<compilation ... > <buildProviders> <add extension=".resx" appliesTo="Code,Resources" type="System.Web.Compilation.ResXBuildProvider" /> <add extension=".wsdl" appliesTo="Code" type="System.Web.Compilation.WsdlBuildProvider" /> <add extension=".xsd" appliesTo="Code" type="System.Web.Compilation.XsdBuildProvider" /> ... </buildProviders></compilation>

Componentes que autocompilan archivosLa sección de configuración<buildProviders> mapea tipos de archivos y directorios a proveedores de construcción

Code-Behind 2.0Code-Behind 2.0

<%@ Page CompileWith="Hello.aspx.cs" ClassName="MyPage_aspx" %>

<html> <body> <form runat="server"> <asp:TextBox ID="Input" RunAt="server" /> <asp:Button Text="Test" OnClick="OnTest" RunAt="server" /> <asp:Label ID="Output" RunAt="server" /> </form> </body></html>

Hello.aspx

Code-Behind 2.0, Cont.Code-Behind 2.0, Cont.

using System;

partial class MyPage_aspx{ void OnTest (Object sender, EventArgs e) { Output.Text = "Hello, " + Input.Text; }}

Hello.aspx.cs

PrecompilaciónPrecompilación

Precompile.axd precompila sitios in-situ para evitar las demoras del primer acceso

Instalación sin el código fuenteInstalación sin el código fuente

Aspnet_compiler.exe precompila sitios y los instala sin el código fuente

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Compilación dinámicaCompilación dinámica

Expresiones $Expresiones $

<asp:SqlDataSource ID="Titles" RunAt="server" ConnectionString="<%$ ConnectionStrings:Pubs %>" SelectCommand="select title_id, title, price from titles" />

<configuration> <connectionStrings> <add name="Pubs" connectionString="server=localhost;database=pubs;..." /> </connectionStrings></configuration>

ASPX

Web.config

Mecanismo declarativo para cargar recursos, cadenas de conexión y más

Constructores de expresionesConstructores de expresiones

Componentes que evalúan expresiones $La sección de configuración <expressionBuilders> mapea prefijos a constructores de expresiones

<compilation ... > <expressionBuilders> <add expressionPrefix="Resources" type="System.Web.Compilation.ResourceExpressionBuilder" /> <add expressionPrefix="ConnectionStrings" type="System.Web.Compilation.ConnectionStringsExpressionBuilder" /> <add expressionPrefix="AppSettings" type="System.Web.Compilation.AppSettingsExpressionBuilder" /> </expressionBuilders></compilation>

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Constructores de expresiones personalizadosConstructores de expresiones personalizados

Posting entre páginasPosting entre páginas

Las páginas pueden ahora hacer postback a otras páginasPropiedades relevantes:

control.PostBackUrl – Identifica al objetivo del postbackPage.PreviousPage – Devuelve una referencia a la página que originó el postback entre páginasPreviousPage.IsCrossPagePostBack – Indica si ocurrió un postback entre páginas

La directiva @ PreviousPageType provee acceso de tipo fuerte a la página anterior

Post Back a una página diferentePost Back a una página diferente<html> <body> <form runat="server"> <asp:TextBox ID="Input" RunAt="server" /> <asp:Button Text="Test" PostBackUrl="PageTwo.aspx" RunAt="server" /> </form> </body></html>

Referencia a un control en una página anterior (con tipos débiles)

Referencia a un control en una página anterior (con tipos débiles)<html> <body> <asp:Label ID="Output" RunAt="server" /> </body></html>

<script language="C#" runat="server">void Page_Load (Object sender, EventArgs e){ if (PreviousPage != null && PreviousPage.IsCrossPagePostBack) { TextBox input = (TextBox) PreviousPage.FindControl ("Input"); Output.Text = "Hello, " + input.Text; }}</script>

Referencia a un control en una página anterior (con tipos fuertes)

Referencia a un control en una página anterior (con tipos fuertes)<%@ PreviousPageType VirtualPath="~/PageOne.aspx" %>

<html> <body> <asp:Label ID="Output" RunAt="server" /> </body></html>

<script language="C#" runat="server">void Page_Load (Object sender, EventArgs e){ if (PreviousPage != null && PreviousPage.IsCrossPagePostBack) Output.Text = "Hello, " + PreviousPage.InputBox.Text;}</script>

Propiedad pública envuelve al TextBox

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Postbacks entre páginasPostbacks entre páginas

Grupos de validaciónGrupos de validación

Los controles de validación ahora se pueden agrupar usando la nueva propiedad ValidationGroup

Implementada por los controles de validaciónTambién implementada por los controles Button, LinkButton e ImageButton

Permite que la página haga post back cuando los validadores en el grupo objetivo son satisfechosCorrige una deficiencia en ASP.NET 1.x

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Grupos de validaciónGrupos de validación

Callbacks de clienteCallbacks de cliente

Postbacks “livianos”El administrador de callback de cliente transmite solicitudes XML-HTTP asincrónicas al servidorEl servidor recibe y procesa la solicitud, pero no vuelve a presentar la páginaEl administrador de callback recibe la respuesta y notifica al cliente vía el callback registrado

Requiere Internet Explorer 5.0 o superiorGran manera de mejorar el nivel de respuesta de la IU

Cómo funcionan los callbacks de clienteCómo funcionan los callbacks de cliente

Cliente CallbackManager

PageEl cliente inicia un callback llamando a la función devuelta por GetCallback-EventReference

El administrador de callback lanza una llamada XML-HTTP asíncrona al servidor

El administrador de callback es notificado de que la llamada ha sido completada

El cliente es notificado de que la llamada ha sido completada y se le entrega el resultado

ClienteServidor

El métodoRaiseCall-backEvent de la página es llamado

11 22

33

4455

Edgar SánchezDirector Regional de Microsoft para EcuadorLogic Studio

Callbacks de clienteCallbacks de cliente

¿Quién tiene el foco?¿Quién tiene el foco?

En ASP.NET 1.x, se necesitaba un script de cliente para asignar el foco a un controlEn ASP.NET 2.0, se usa Page.SetFocus

<asp:TextBox ID="UserName" RunAt="server" /> . . .<script language="C#" runat="server">void Page_Load (Object sender, EventArgs e){ SetFocus ("UserName");}</script>

Panel.DefaultButtonPanel.DefaultButton

Designa al botón que hará clic cuando se presione Intro y el foco está en el panelLe da la vuelta al hecho de que ASP.NET limita las páginas a un solo <form> runat="server"

<asp:Panel DefaultButton="Button1" RunAt="server"> ... <asp:Button ID="Button1" ... /></asp:Panel><asp:Panel DefaultButton="Button2" RunAt="server"> ... <asp:Button ID="Button2" ... /></asp:Panel>

Mapeo de URLMapeo de URL

Mapea URLs virtuales a URLs físicosBueno para la transformación declarativa de páginas físicas en múltiples páginas lógicas

<urlMappings enabled="true"> <add url="~/Home.aspx" mappedUrl="~/default.aspx?tabindex=0" /> <add url="~/Forums.aspx" mappedUrl="~/default.aspx?tabindex=1" /> <add url="~/Faq.aspx" mappedUrl="~/default.aspx?tabindex=2" /></urlMappings>

URL virtual

URL físico

Machine.configMachine.config

Las configuración por omisión están “quemadas” en el sistema

Reduce el tamaño de Machine.configMejora el rendimiento de inicio de la aplicación

Nuevos archivos relacionados con Machine.config:Machine.config.defaults – Documenta los valores por omisión quemados en el runtimeMachine.config.comments – Documenta la sintaxis de los elementos de configuración, muchos de los cuales son nuevosEn el mismo directorio que Machine.config