Español
中文(简体)
中文(繁体)
한국어
日本語
English
Português
Español
Русский
العربية
Indonesia
Deutsch
Français
ภาษาไทย
Mapa del sitio completo
Últimas actualizaciones
Inicio
Código fuente
Programación relacionada
Recursos para crear sitios web
Tutorial de diseño web
Tutorial de programación en red
Inicio
>
tutoriales de libros
>
Tutorial de .NET
Pro ASP.NET 3.5 en C# 2008 Segunda edición
Tutorial de .NET
Sin recursos disponibles
■CAPÍTULO 10 Controles de datos enriquecidos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
El GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Definición de columnas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Formatear el GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Campos de formato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Estilos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Valores específicos del formato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Selección de fila de GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Uso de la selección para crear un formulario maestro-detalles. . . . . . . . . . . . . . . . . . . . 398
El evento SelectedIndexChanged. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Uso de un campo de datos como botón de selección. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Ordenando el GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Ordenando con SqlDataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Ordenar con ObjectDataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Clasificación y Selección. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Clasificación avanzada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
xiv ■ CONTENIDO
Paginando el GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Localización automática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Paginación personalizada con ObjectDataSource. . . . . . . . . . . . . . . . . . . . . . 408
Personalización de la barra de buscapersonas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Plantillas GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Usando múltiples plantillas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Edición de plantillas en Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Vinculación a un método. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Manejo de eventos en una plantilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Edición con una plantilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
El ListView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Agrupación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Paginación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
DetallesView y FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
La vista de detalles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
El FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Cuadrículas avanzadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Resúmenes en GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Una vista principal/secundaria en una sola tabla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Edición de un campo mediante una tabla de búsqueda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Servir imágenes desde una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Detección de conflictos de concurrencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
■CAPÍTULO 11 Almacenamiento en caché y páginas asincrónicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Comprender el almacenamiento en caché de ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Almacenamiento en caché de resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Almacenamiento en caché de salida declarativa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Almacenamiento en caché y cadena de consulta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Almacenamiento en caché con parámetros de cadena de consulta específicos. . . . . . . . . . . . . . . . . . . . . 454
Control de almacenamiento en caché personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Almacenamiento en caché con la clase HttpCachePolicy. . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Sustitución posterior al caché y almacenamiento en caché de fragmentos. . . . . . . . . . . . . . . . . . . . 457
Perfiles de caché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Configuración de caché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Almacenamiento en caché de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Agregar elementos al caché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Una prueba de caché sencilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Prioridades de caché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Almacenamiento en caché con los controles de origen de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Dependencias de caché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Dependencias de elementos de archivos y caché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Dependencias agregadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
■CONTENIDO xv
La devolución de llamada del artículo eliminado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Comprensión de las notificaciones de caché de SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Notificaciones de caché en SQL Server 2000 y SQL Server 7. . . . . . . . . . . . 474
Notificaciones de caché en SQL Server 2005 y SQL Server 2008. . . . . . . . 479
Dependencias de caché personalizadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Una dependencia de caché personalizada básica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Una dependencia de caché personalizada mediante colas de mensajes. . . . . . . . . . . . . . . 483
Páginas asincrónicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Creando una página asincrónica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Consulta de datos en una página asincrónica. . . . . . . . . . . . . . . . . . . . . . . . . . . 488
Manejo de errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Uso del almacenamiento en caché con tareas asincrónicas. . . . . . . . . . . . . . . . . . . . . . . . . . 492
Múltiples tareas asincrónicas y tiempos de espera. . . . . . . . . . . . . . . . . . . . . . . . 495
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
■CAPÍTULO 12 Archivos y secuencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Trabajar con el sistema de archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Las clases de directorio y archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Las clases DirectoryInfo y FileInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
La clase DriveInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Trabajar con atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Filtrar archivos con comodines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Recuperar información de la versión del archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
La clase de ruta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Un explorador de archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Lectura y escritura de archivos con Streams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Archivos de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Archivos binarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Subiendo archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Hacer que los archivos sean seguros para varios usuarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Compresión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Publicación por entregas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
■CAPÍTULO 13 LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Conceptos básicos de LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Ejecución Diferida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
Cómo funciona LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
Expresiones LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
Expresiones LINQ "Bajo el capó". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
LINQ al conjunto de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Conjuntos de datos escritos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Valores nulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
xvi ■CONTENIDO
LINQ a SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Clases de entidades de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
El contexto de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Consultas de LINQ a SQL "bajo el capó" . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
LINQ to SQL y componentes de bases de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Seleccionar un único registro o valor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Generando clases de datos automáticamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Relaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Generación de métodos para procedimientos almacenados. . . . . . . . . . . . . . . . . . . . . . . . . 571
Realizar cambios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
El LinqDataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Visualización de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Obteniendo datos relacionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Edición de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Validación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
■CAPÍTULO 14 XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
¿Cuándo tiene sentido utilizar XML? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Una introducción a XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Las ventajas de XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
XML bien formado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Espacios de nombres XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Esquemas XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Procesamiento XML basado en secuencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Escritura de archivos XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Lectura de archivos XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Procesamiento XML en memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
El documento Xml. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
El navegador XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
El documento X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Búsqueda de contenido XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Buscando con XmlDocument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Buscando XmlDocument con XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
Buscando XDocument con LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Validación de contenido XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Un esquema básico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Validando con XmlDocument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Validando con XDocument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Transformando contenido XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Una hoja de estilo básica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Usando XslCompiledTransform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
■CONTENIDO xvii
Usando el control XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Transformando XML con LINQ a XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Enlace de datos XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Vinculación no jerárquica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Usando XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Cuadrículas anidadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Enlace jerárquico con TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Usando XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Enlace a contenido XML de otras fuentes. . . . . . . . . . . . . . . . . . . . . . . . 637
Actualización de XML a través de XmlDataSource. . . . . . . . . . . . . . . . . . . . . . . . 637
XML y el conjunto de datos ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Conversión del conjunto de datos a XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
Accediendo a un conjunto de datos como XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
PARTE 3 ■ ■ ■ Creación de sitios web ASP.NET
■CAPÍTULO 15 Controles de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Conceptos básicos de control de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Creando un control de usuario simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Convertir una página en un control de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Agregar código a un control de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Manejo de Eventos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Agregar propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Usando objetos personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Agregar eventos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
"Exponiendo el control de la red interna". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Carga dinámica de controles de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Marcos de portal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Almacenamiento en caché de páginas parciales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Variar por control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Compartir controles en caché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
■CAPÍTULO 16 Temas y páginas maestras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Hojas de estilo en cascada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Creando una hoja de estilo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Aplicar reglas de hojas de estilo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
xviii ■CONTENIDO
Temas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Carpetas de temas y máscaras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Aplicar un tema simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
Manejo de conflictos temáticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Creación de múltiples máscaras para el mismo control. . . . . . . . . . . . . . . . . . . . . . . 674
Máscaras con plantillas e imágenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Usando CSS en un tema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
Aplicar temas a través de un archivo de configuración. . . . . . . . . . . . . . . . . . . . . 677
Aplicar temas dinámicamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
Estandarización del diseño del sitio web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Conceptos básicos de la página maestra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Una página maestra sencilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
Una página de contenido simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Contenido predeterminado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
Páginas maestras con tablas y diseño CSS. . . . . . . . . . . . . . . . . . . . . . . . . 685
Páginas maestras y rutas relativas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
Aplicación de páginas maestras a través de un archivo de configuración. . . . . . . . . . . . . . . . . 688
Páginas maestras avanzadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Interactuando con la clase Master Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Configuración dinámica de una página maestra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Anidamiento de páginas maestras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
■CAPÍTULO 17 Navegación por el sitio web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Páginas con múltiples vistas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
El control MultiView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
El control del asistente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
Mapas del sitio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
Definición de un mapa del sitio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
Vinculación a un mapa del sitio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Pan rallado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Mostrando una parte del mapa del sitio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Los objetos del mapa del sitio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Agregar información personalizada del mapa del sitio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Creación de un SiteMapProvider personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Mapeo de URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Recorte de seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
El control TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
El nodo del árbol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Poblando nodos bajo demanda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Estilos de vista de árbol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
■CONTENIDO xix
El control del menú. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Estilos de menú. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
Plantillas de menú. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
■CAPÍTULO 18 Implementación del sitio web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Servicios de información de Internet (IIS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Sitios web y directorios virtuales de IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Consola de administración de IIS y configuración de IIS. . . . . . . . . . . . . . . . . . . . . 747
Asignación de sitios web, directorios virtuales y archivos a URL. . . . . . . . . . . . . 748
Profundizando en la arquitectura de IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
Instalación de IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Gestión de sitios web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
Gestión de directorios virtuales y sitios web con IIS 5.x e IIS 6.0. . . . . . . 772
Gestión de grupos de aplicaciones en IIS 6.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
Gestión de directorios virtuales y sitios web con IIS 7.0. . . . . . . . . . . . . . . 784
Gestión de grupos de aplicaciones en IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
Implementación de sus aplicaciones ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
Verificación de la instalación de ASP.NET en IIS 5.x e IIS 6.0. . . . . . . . . . . . . . 800
Ejecución en paralelo de ASP.NET en IIS 5.x e IIS 6.0. . . . . . . . . . . . . . . 801
Ejecución en paralelo de ASP.NET en IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . 803
Configuración de los ajustes de tiempo de ejecución HTTP al implementar en IIS 5.x. . . . . . . . 803
Modelos de compilación en ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
Implementación con Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Proyectos de implementación web de Visual Studio 2005. . . . . . . . . . . . . . . . . . . . . . 809
VirtualPathProvider en ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Monitoreo de salud en ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
Comprensión de la estructura básica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Eventos y Proveedores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
PARTE 4 ■ ■ ■ Seguridad
■CAPÍTULO 19 El modelo de seguridad ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Qué significa crear software seguro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Comprender las amenazas potenciales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Directrices de codificación segura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Comprender a los guardianes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Comprender los niveles de seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Autenticación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Autorización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
xx ■CONTENIDO
Confidencialidad e Integridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Reuniéndolo todo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Seguridad de los servicios de información de Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
Autenticación y autorización en IIS 5.x e IIS 6.0. . . . . . . . . . . . . . . 835
Configuración de seguridad en IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
Comprender la capa de sockets seguros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
Arquitectura de seguridad ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
Autenticación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Autorización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
El contexto de seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
API de membresía y roles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
■CAPÍTULO 20 Autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Presentamos la autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
¿Por qué utilizar la autenticación de formularios? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
¿Por qué no utilizaría la autenticación de formularios? . . . . . . . . . . . . . . . . . . . . 862
¿Por qué no implementar usted mismo la autenticación de cookies? . . . . . . . . . . . . . . . . 863
Las clases de autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
Implementación de autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Configurar la autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Denegar el acceso a usuarios anónimos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Crear una página de inicio de sesión personalizada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Tienda de credenciales personalizadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Cookies persistentes en autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . 877
IIS 7.0 y autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
■CAPÍTULO 21 Membresía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Presentamos la API de membresía de ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Usando la API de membresía. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
Configurar la autenticación de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
Creando el almacén de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
Configuración de cadena de conexión y proveedor de membresía. . . . . . . . . . . . . 896
Creación y autenticación de usuarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
Usando los controles de seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
El control de inicio de sesión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
El control de estado de inicio de sesión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
El control LoginView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
El control de recuperación de contraseña. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
El control de cambio de contraseña. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
El control CreateUserWizard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
■CONTENIDO xxi
Configuración de membresía en IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
Configuración de Proveedores y Usuarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
Uso de la API de membresía con otras aplicaciones. . . . . . . . . . . . . . . . . . 928
Usando la clase de membresía. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Recuperar usuarios de la tienda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Actualización de Usuarios en la Tienda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Crear y eliminar usuarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Validación de usuarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Uso de membresía en Windows Forms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
■CAPÍTULO 22 Autenticación de Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Presentamos la autenticación de Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
¿Por qué utilizar la autenticación de Windows? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
¿Por qué no utilizaría la autenticación de Windows? . . . . . . . . . . . . . . . . . . 941
Mecanismos de autenticación de Windows. . . . . . . . . . . . . . . . . . . . . . . . . . 942
Implementación de la autenticación de Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
Configuración de IIS 5.x o IIS 6.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
Configurando IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
Configurando ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
Denegar el acceso a usuarios anónimos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
Acceso a la información del usuario de Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
Suplantación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
Suplantación en Windows 2000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
Suplantación en Windows XP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
Suplantación y delegación en Windows Server 2003. . . . . . . . . . . . . 964
Suplantación en Windows Vista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
Suplantación y delegación en Windows Server 2008. . . . . . . . . . . . . 968
Suplantación configurada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
Suplantación programática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
■CAPÍTULO 23 Autorización y funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
Autorización de URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
Reglas de autorización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
Autorización de Archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
Verificaciones de autorización en código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Usando el método IsInRole(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Usando la clase PrincipalPermission. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
Uso de la API de roles para autorización basada en roles. . . . . . . . . . . . . . . . . . . . . . . . 985
Usando el control LoginView con roles. . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
Acceso a roles mediante programación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
Uso de la API de roles con autenticación de Windows. . . . . . . . . . . . . . . . . . . 994
xxii ■CONTENIDO
Protección de recursos que no son ASP.NET en IIS 5 y 6. . . . . . . . . . . . . . . . . . . . . . . . 997
Agregar una asignación de tipo de archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
Escribir un controlador HTTP personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
Autorización y roles en IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
Autorización con Roles ASP.NET en IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . 1002
Gestión de funciones de ASP.NET con IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
■CAPÍTULO 24 Perfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Comprensión de los perfiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Rendimiento del perfil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Cómo los perfiles almacenan datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
Perfiles y autenticación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
Perfiles frente a componentes de datos personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
Usando SqlProfileProvider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
Creando las tablas de perfil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
Configurando el Proveedor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
Definición de propiedades del perfil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
Usando las propiedades del perfil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
Serialización de perfiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Grupos de perfiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
Perfiles y tipos de datos personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
La API de perfiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
Perfiles anónimos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
Proveedores de perfiles personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
Las clases de proveedores de perfiles personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
Diseño de FactoredProfileProvider. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
Codificando FactoredProfileProvider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
Probando FactoredProfileProvider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
■CAPÍTULO 25 Criptografía. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
Cifrado de datos: la confidencialidad importa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
El espacio de nombres de criptografía .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
Comprensión de las clases de criptografía .NET. . . . . . . . . . . . . . . . . . . . . . . . . . 1046
Algoritmos de cifrado simétrico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
Cifrado asimétrico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
Las clases de cifrado abstracto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
La interfaz ICryptoTransform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
La clase CryptoStream. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
■CONTENIDO xxiii
Cifrado de datos confidenciales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
Manejo de secretos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
Usando algoritmos simétricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
Usando algoritmos asimétricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
Cifrar datos confidenciales en una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . 1061
Cifrar la cadena de consulta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
Envolviendo la cadena de consulta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
Creando una página de prueba. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
■CAPÍTULO 26 Proveedores de membresía personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
Arquitectura de Proveedores Personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
Pasos básicos para crear proveedores personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
Diseño General del Proveedor Personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
Diseño e Implementación de la Tienda Personalizada. . . . . . . . . . . . . . . . . . . . 1074
Implementación de las clases de proveedores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
Uso de las clases de proveedores personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
PARTE 5 ■ ■ ■ Interfaz de usuario avanzada
■CAPÍTULO 27 Controles de servidor personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
Conceptos básicos del control de servidor personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
Creación de un control personalizado básico. . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
Usando un control personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
Controles personalizados en la caja de herramientas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
Crear un control web que admita propiedades de estilo. . . . . . . . . . . . . . 1114
El proceso de renderizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118
Manejo de diferentes navegadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
El HTMLTextWriter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
Detección del navegador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120
Propiedades del navegador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122
Anulación de la detección del tipo de navegador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
Representación adaptativa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
Estado de control y eventos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
Ver estado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
Estado de control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129
Datos de devolución y eventos de cambio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131
Activar una devolución de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133
Ampliación de los controles web existentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
Controles compuestos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
Finalizar controles derivados de la barra lateral. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
xxiv ■CONTENIDO
Controles de plantilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Creando un control de plantilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Uso de plantillas personalizadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143
Estilos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
■CAPÍTULO 28 Soporte en tiempo de diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
Los jugadores clave. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
Atributos en tiempo de diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
La ventana Propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
Atributos y Herencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157
El icono de la caja de herramientas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158
Recursos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
Creando un recurso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
Recuperar un recurso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
Sustitución de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
Serialización de código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
Convertidores de tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
Atributos de serialización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
Editores de tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
Diseñadores de controles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
HTML en tiempo de diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
Etiquetas inteligentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
■CAPÍTULO 29 Gráficos dinámicos y GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
El control ImageMap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
Creando puntos de acceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184
Manejo de clics en puntos de acceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
Un punto de acceso personalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
Dibujar con GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
Dibujo sencillo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
Formato y calidad de imagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
La clase de gráficos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
Usando una ruta de gráficos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
Bolígrafos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
Pinceles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198
Incrustar gráficos dinámicos en una página web. . . . . . . . . . . . . . . . . . . . . . . . . . 1199
Usando el formato PNG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
Pasar información a imágenes dinámicas. . . . . . . . . . . . . . . . . . . . . . . . . . 1201
Controles personalizados que utilizan GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
Gráficos con GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
■ CONTENIDO xxv
■CAPÍTULO 30 Portales con páginas de elementos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
Páginas típicas del portal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
Páginas de elementos web básicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
Creando el diseño de la página. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218
Controles WebPartManager y WebPartZone. . . . . . . . . . . . . . . . . . . . . . 1219
Agregar elementos web a la página. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
Personalizando la página. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224
Creación de elementos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226
Tareas simples de elementos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227
Desarrollo de elementos web avanzados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235
Editores de elementos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
Conexión de elementos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250
Verbos personalizados y elementos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258
Controles de usuario y elementos web avanzados. . . . . . . . . . . . . . . . . . . . . . . . . . . 1259
Carga de elementos web dinámicamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262
Autorización de elementos web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
Tareas Finales de Personalización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
PARTE 6 ■ ■ ■ Programación del lado del cliente
■CAPÍTULO 31 Técnicas de JavaScript y Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
Conceptos básicos de JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
El modelo de objetos de documento HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274
Eventos del lado del cliente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275
Bloques de guión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277
Manipulación de elementos HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
Depuración de JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1280
Ejemplos básicos de JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
Creando un procesador de páginas JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
Uso de JavaScript para descargar imágenes de forma asincrónica. . . . . . . . . . . . . . 1285
Representación de bloques de script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290
Ataques de inyección de scripts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
Solicitar Validación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
Deshabilitar la validación de solicitudes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
Controles personalizados con JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
Ventanas emergentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
Botones de desplazamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
Marcos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
Navegación por cuadros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302
Marcos en línea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
xxvi ■CONTENIDO
Entendiendo al Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304
El objeto XMLHttpRequest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305
Un ejemplo de Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
Usando Ajax con devoluciones de llamadas de clientes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Creando una devolución de llamada de cliente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Devoluciones de llamadas de clientes "bajo el capó". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317
Devoluciones de llamadas de clientes en controles personalizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
■CAPÍTULO 32 ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
Presentamos ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
ASP.NET AJAX en el cliente: las bibliotecas de scripts. . . . . . . . . . . . . . . . . . 1325
ASP.NET AJAX en el servidor: ScriptManager. . . . . . . . . . . . . . . . . . 1325
Devoluciones de llamada del servidor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326
Servicios Web en ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
El proxy de servicio web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
Colocar un método web en una página. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
Servicios de aplicaciones ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
Controles del servidor ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
Renderizado parcial con UpdatePanel. . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
Actualizaciones programadas con el temporizador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
Actualizaciones que requieren mucho tiempo con UpdateProgress. . . . . . . . . . . . . . . . . . . . 1352
Profundizando en las bibliotecas cliente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
Comprender el modelo de cliente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
Programación orientada a objetos en JavaScript. . . . . . . . . . . . . . . . . . . . . . . 1357
El marco de la página web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
Extensores de control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
Instalación del kit de herramientas de control ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . 1370
El extensor de autocompletar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371
El kit de herramientas de control ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378
■CAPÍTULO 33 Luz plateada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
Entendiendo Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
Silverlight frente a Flash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
Adopción de Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Silverlight y WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Instalación de Silverlight y las extensiones de Visual Studio. . . . . . . . . . . . . . . 1383
Creando un proyecto Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384
La página de entrada HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
El script de inicialización de Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
La página XAML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388
El código subyacente XAML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
■CONTENIDO xxvii
Propiedades y Eventos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392
Compilación de Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
Conceptos básicos de Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
Clases de .NET Framework en Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . 1395
El lienzo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396
Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401
Interactuando con HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
Almacenamiento Aislado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
Silverlight y ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
Futuros ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
Comunicación entre Silverlight y ASP.NET. . . . . . . . . . . . . . . . . . 1412
Dibujo en 2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
Formas simples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413
Caminos y Geometrías. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417
Pinceles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
Transparencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
Animación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
Conceptos básicos de animación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
Definición de una animación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
Un ejemplo de animación interactiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
Se transforma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1440
■ÍNDICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
Expandir
Información adicional
Versión
Tipo
Tutorial de .NET
Fecha de actualización
2009-05-26
tamaño
30.65MB
Aplicaciones relacionadas
gafas de sol profesionales
2023-10-17
Explorador2 Pro
2009-06-04
BSP Player Pro
2009-06-03
ACDSeePro
2009-05-30
TopStyle Pro
2009-05-29
Copiar profesional
2009-04-20
Recomendado para ti
chat.petals.dev
Otro código fuente
1.0.0
GPT Prompt Templates
Otro código fuente
1.0.0
GPTyped
Otro código fuente
GPTyped 1.0.5
Programación avanzada del sitio web ASP.NET
Tutorial de .NET
Notas de estudio de ADO.net
Tutorial de .NET
Programación ASP.NET versión china (tercera edición)
Tutorial de .NET
Google Dorks
Otro código fuente
1.0
shepherd
Otro código fuente
v6.1.6-react-shepherd: Prepare Release (#3063)
mongo express
Otro código fuente
v1.1.0-rc-3
Información relacionada
Todo
Introducción detallada a los parámetros de rendimiento de PS5 Pro
2024-11-12
Tutorial de corrección de vibración profesional de HuaWorld
2023-07-31
Cómo hacer dibujos en Paint World Pro
2023-07-28
Cómo usar la máscara de recorte en Paint World Pro
2023-07-28
Cómo utilizar la paleta de colores Paint World Pro
2023-07-28
Cómo utilizar el aerógrafo Painting World Pro
2023-07-28
Cómo seleccionar una selección en Paint World Pro
2023-07-28
Tutorial de calco "Drawing World Pro"
2023-07-27
Tutorial de máscara de corte "Painting World Pro"
2023-07-27
¿Cuál es la diferencia entre Hanglv Zongheng y Hanglv Zongheng pro?
2023-07-10
¿Cuál es la diferencia entre Hanglv Zongheng y Hanglv Zongheng pro?
2023-07-10
Cómo tomar una captura de pantalla en Huawei p60 pro
2023-05-24