El Libro del Día: 2016-08-05
Titulo: Beginning ASP.NET for Visual Studio 2015
Autor: William Penberthy
Editorial: Wrox
Nro Paginas: 793
Capítulos:
CHAPTER 1 Getting Started with ASP.NET 6.0
CHAPTER 2 Building an Initial ASP.NET Application
CHAPTER 3 Designing Your Web Pages
CHAPTER 4 Programming in C# and VB.NET
CHAPTER 5 ASP.NET Web Form Server Controls
CHAPTER 6 ASP.NET MVC Helpers and Extensions
CHAPTER 7 Creating Consistent-Looking Websites
CHAPTER 8 Navigation
CHAPTER 9 Displaying and Updating Data
CHAPTER 10 Working with Data—Advanced Topics
CHAPTER 11 User Controls and Partial Views
CHAPTER 12 Validating User Input
CHAPTER 13 ASP.NET AJAX
CHAPTER 14 jQuery
CHAPTER 15 Security in Your ASP.NET Website
CHAPTER 16 Personalizing Websites
CHAPTER 17 Exception Handling, Debugging, and Tracing
CHAPTER 18 Working with Source Control
CHAPTER 19 Deploying Your Website
APPENDIX Answers to Exercises
Descarga:
Beginning_ASP.NET_for_Visual_Studio_2015
Blog de Luis Dueñas dedicado a la difusión del Desarrollo en Microsoft .NET, Visual Studio, WinForms, WebForms, MVC, ASP .NET, jQuery, AJAX, HTML5, JavaScript, Móviles, etc. Encontrarás Libros, Demos, Artículos Técnicos, Entrenamiento.
Mostrando las entradas con la etiqueta jQuery. Mostrar todas las entradas
Mostrando las entradas con la etiqueta jQuery. Mostrar todas las entradas
viernes, 5 de agosto de 2016
El Libro del Día: Beginning ASP.NET for Visual Studio 2015
Etiquetas:
AJAX,
ASP.NET,
Beginning,
C#,
Extensions,
jQuery,
Libros,
MVC Helpers,
Navigation,
Partial Views,
Security,
Server Controls,
User Controls,
Validating,
VB.NET,
VS 2015,
Web Form,
Web Pages,
William Penberthy,
Wrox
miércoles, 13 de julio de 2016
Artículo - JavaScript Developer
JavaScript Developer
1. Introducción
JavaScript es un Lenguaje de Programación interpretado desarrollado por Brendan Eich en 1995 cuando trabajaba en Netscape. JavaScript es orientado a objetos, basado en prototipos, débilmente tipado y dinámico. La especificación de este lenguaje se denomina ECMAScript y es elaborada por ECMA International.
Actualmente es uno de los Lenguajes de Programación mas usados en el mundo, ya que sirve para crear aplicaciones web, tanto de lado del cliente (desde sus inicios) y también de lado del servidor (en la actualidad).
En los 20 años de vida que tiene JavaScript, en los 10 primeros años solo se usaba para validaciones y manejo de controles, pero a partir de la incorporación de AJAX (2005), la creación de librerías como jQuery (2006), la creación de JavaScript en el servidor con NodeJS (2009), la aparición de las nuevas APIs sobre todo de HTML5 y la nueva especificación del lenguaje ECMAScript6 (2012), ha originado que JavaScript tenga un crecimiento exponencial.
Muchos desarrolladores escribían la mayor parte del código en el servidor, ya que los Frameworks de ese lado tenían una gran cantidad de APIs o Librerías que permitían realizar cualquier tipo de tareas, desde acceso a datos hasta gráficos, operaciones con datos, manejo de archivos, etc. Es por eso que se usaba mucho código en PHP, Java o .NET, ysolo un mínimo de código en JavaScript para validar, manejar el DOM y mejorar el formato o estilo.
Actualmente, todo lo que podíamos hacer en el servidor, lo podemos hacer en el cliente con JavaScript, desde hacer llamadas asíncronas con XHR o AJAX hasta manipular los datos, crear gráficos (en 2D y en 3D), cifrar datos, enviar y recibir notificaciones en tiempo real, etc. Esto se puede hacer nativamente usando las APIs de JavaScript o usando una Librería o Framework que encapsule dicho trabajo.
Nota: Antes yo escribía 80% de código en el servidor y 20% en el cliente, pero desde hace unos años escribo 20% de código en el servidor y 80% en el cliente usando JavaScript puro. Estos porcentajes concuerdan con "El Problema de la Performance" que se da 80% en el cliente y 20% en el servidor.
Muchos programadores creen conocer JavaScript, pero en realidad no conocen ni el 10% de lo que tiene. El propósito de este artículo es contribuir a aumentar ese conocimiento, mostrando la Historia, las APIs, las Librerías, los Frameworks, las Herramientas y las fuentes donde pueden aprender más sobre este lenguaje, para cambiar su forma de programar y usar "La Web como Plataforma de Desarrollo" a través del Navegador (Browser) usando como lenguaje "JavaScript".
2. Cronología de JavaScript (20 años)
- 1995: En Mayo Brendan Eich crea Mocha en 10 días
- 1995: En Setiembre se crea LiveScript
- 1995: En Diciembre cambia de nombre a JavaScript
- 1996: Microsoft crea JScript
- 1996: DHTML
- 1997: ECMA-262 Ed1 (ES1)
- 1998: DOM Level 1
- 1999: ES3 (Base JavaScript actual)
- 1999: Microsoft crea XmlHttpRequest (Pre-AJAX)
- 2000: DOM Level 2
- 2001: Douglas Crockford crea JSON
- 2004: DOM Level 3
- 2005: AJAX
- 2008: ECMAScript 4 (ES4)
- 2009: ECMAScript 5 (ES5). JSON, Object.create
- 2012: ECMAScript 6 (ES6). Modulos, Proxys
- 2012: Navigation Timing
- 2012: HTML5 Web Messaging
- 2012: Web Workers
- 2012: WebSocket
- 2013: Web Storage
- 2013: Touch Events
- 2013: Geolocation API
- 2013: Performance Timeline
- 2013: Web Notifications
- 2013: File API
- 2013: Messaging API
- 2013: Web Telephony API
- 2013: MediaStream Image Capture
- 2013: WebRTC 1.0
- 2013: Web Audio API
- 2014: Progress Events
- 2014: Indexed Database
- 2014: Server Sent Events (SSE)
- 2014: Web Cryptography API
- 2014: Web NFC API
- 2014: XMLHttpRequest Level 1
- 2014: Push API
- 2014: Streams API
- 2014: Screen Orientation API
- 2014: Service Workers
- 2014: TCP and UDP Socket API
- 2014: URL
- 2014: Clipboard API and Events
- 2015: ECMA-262 (6th Edition). ECMAScript 2015 Language Specification
3. APIs de JavaScript
- Document Object Model (DOM)
-) HTML: Document, Element, Event, HTML..., Node, NodeList, ParentNode, etc.
-) XML: XMLDocument.
-) SVG: Scalable Vector Graphics
- Gráficos
-) Canvas: CanvasGradient, CanvasRenderingContext2D, HTMLCanvasElement, ImageData.
-) SVG: SVGAnimate, SVGAnimated, SVGColor, SVGElement, SGVFont, SVGPath, SVGText.
-) WebGL: WebGLBuffer, WebGLObject, WebGLRenderbuffer, WebGLRenderingContext, etc.
- Almacenamiento
-) File API: Blob, File, FileList, FileReader, FileReaderSync, URL.
-) IndexedDB: IDBCursor, IDBDataBase, IDBFactory, IDBIndex, IDBObjectStore, etc.
-) Web Storage: Storage, StorageEvent, WindowLocalStorage, WindowSessionStorage.
- Conectividad
-) Web Sockets: BroadcastChannel, CloseEvent, EventSource, PortCollection, WebSocket.
-) Messaging: MessageChannel, MessageEvent, MessagePort.
-) WebRTC: RTCPeerConnection, RTCIceServer, RTCIceCandidate, RTCDataChannel, etc.
- Acceso:
-) Drag And Drop (D&D): DataTransfer, DataTransferItem, DataTransferItemList, DragEvent.
-) FullScreen: Document (fullscreenElement, fullscreenEnabled), Element (requestFullscreen).
- Estilos
-) CSS Object Model: CSS, CSSRule, CSSStyleSheet, MediaList, StyleSheet, etc.
-) Selectors: Document (querySelector, querySelectorAll), DocumentFragment, Element.
- Multimedia
-) Animation Timing: Window (cancelAnimationFrame, requestAnimationFrame).
-) Media: AudioTrack, HTMLMediaElement, HTMLTrackElement, MediaController, VideoTrack.
-) Pointer Lock: Document (exitPointerLock), Element (requestPointerLock), MouseEvent.
-) Web Audio: AnalyserNode, AudioBuffer, AudioListener, AudioParam, DelayNode, GainNode.
- Performance
-) Browser: History, ImageBitmap, Location, MimeType, Navigator, WindowBase64 (atob, btoa),
WindowTimers (clearInterval, clearTimeout, setInterval, setTimeout), etc.
-) Typed Arrays: ArrayBuffer, ArrayBufferView, DataView, Float..Array, Int..Array, Uint..Array.
-) Web Workers: AbstractWorker, SharedWorker, Worker, WorkerLocation, WorkerNavigator, etc.
- Componentes Web
-) Shadow DOM: CSSHostRule, CSSRule, Element (createShadowRoot), ShadowRoot, etc.
-) Custom Elements: Element (customElements.define)
-) HTML Imports: HTMLLinkElement (rel=import), Document (write, close).
- ECMAScript
-) Tipos de Datos Primitivos: Boolean, Null, Undefined, Number, String, Symbol (ES6).
-) Tipos Objetos: Array, Date, Error, Function, Global, JSON, Math, Object, RegExp.
-) Colección de Claves (Objetos): Maps, Sets, WeakMaps, WeakSets.
- Seguridad Web (WebCryptography)
-) Clases: Crypto, Algorithm, KeyAlgorithm, CryptoKey, SubtleCrypto, etc.
-) Operaciones: encrypt, decrypt, sign, verify, deriveBits, wrapKey, unwrapKey,
generateKey, importKey, exportKey, getLength.
-) Algoritmos: RSASSA-PKCS1-v1_5, RSA-PSS, RSA-OAEP, ECDSA, ECDH, AES-CBC,
HMAC, DH, SHA-1, SHA-256, SHA-384, SHA-512, CONCAT, HKDF-CTR, PBKDF2, etc.
- Comunicación Asíncrona con el Servidor:
-) Cliente al Servidor: XmlHttpRequest (XHR)
-) Servidor al Cliente: Server-Send Events (SSE)
-) Bidireccional: Web Sockets
6.7. Documentación Oficial
- W3C
- ECMAScript
- HTML5 Org
- Guía de Internet Explorer 11 para desarrolladores (Microsoft)
- Mozilla Developer Network (MDN)
- HTML5 Rocks (Google)
- W3Schools.com
1. Introducción
JavaScript es un Lenguaje de Programación interpretado desarrollado por Brendan Eich en 1995 cuando trabajaba en Netscape. JavaScript es orientado a objetos, basado en prototipos, débilmente tipado y dinámico. La especificación de este lenguaje se denomina ECMAScript y es elaborada por ECMA International.
Actualmente es uno de los Lenguajes de Programación mas usados en el mundo, ya que sirve para crear aplicaciones web, tanto de lado del cliente (desde sus inicios) y también de lado del servidor (en la actualidad).
En los 20 años de vida que tiene JavaScript, en los 10 primeros años solo se usaba para validaciones y manejo de controles, pero a partir de la incorporación de AJAX (2005), la creación de librerías como jQuery (2006), la creación de JavaScript en el servidor con NodeJS (2009), la aparición de las nuevas APIs sobre todo de HTML5 y la nueva especificación del lenguaje ECMAScript6 (2012), ha originado que JavaScript tenga un crecimiento exponencial.
Muchos desarrolladores escribían la mayor parte del código en el servidor, ya que los Frameworks de ese lado tenían una gran cantidad de APIs o Librerías que permitían realizar cualquier tipo de tareas, desde acceso a datos hasta gráficos, operaciones con datos, manejo de archivos, etc. Es por eso que se usaba mucho código en PHP, Java o .NET, ysolo un mínimo de código en JavaScript para validar, manejar el DOM y mejorar el formato o estilo.
Actualmente, todo lo que podíamos hacer en el servidor, lo podemos hacer en el cliente con JavaScript, desde hacer llamadas asíncronas con XHR o AJAX hasta manipular los datos, crear gráficos (en 2D y en 3D), cifrar datos, enviar y recibir notificaciones en tiempo real, etc. Esto se puede hacer nativamente usando las APIs de JavaScript o usando una Librería o Framework que encapsule dicho trabajo.
Nota: Antes yo escribía 80% de código en el servidor y 20% en el cliente, pero desde hace unos años escribo 20% de código en el servidor y 80% en el cliente usando JavaScript puro. Estos porcentajes concuerdan con "El Problema de la Performance" que se da 80% en el cliente y 20% en el servidor.
Muchos programadores creen conocer JavaScript, pero en realidad no conocen ni el 10% de lo que tiene. El propósito de este artículo es contribuir a aumentar ese conocimiento, mostrando la Historia, las APIs, las Librerías, los Frameworks, las Herramientas y las fuentes donde pueden aprender más sobre este lenguaje, para cambiar su forma de programar y usar "La Web como Plataforma de Desarrollo" a través del Navegador (Browser) usando como lenguaje "JavaScript".
2. Cronología de JavaScript (20 años)
- 1995: En Mayo Brendan Eich crea Mocha en 10 días
- 1995: En Setiembre se crea LiveScript
- 1995: En Diciembre cambia de nombre a JavaScript
- 1996: Microsoft crea JScript
- 1996: DHTML
- 1997: ECMA-262 Ed1 (ES1)
- 1998: DOM Level 1
- 1999: ES3 (Base JavaScript actual)
- 1999: Microsoft crea XmlHttpRequest (Pre-AJAX)
- 2000: DOM Level 2
- 2001: Douglas Crockford crea JSON
- 2004: DOM Level 3
- 2005: AJAX
- 2008: ECMAScript 4 (ES4)
- 2009: ECMAScript 5 (ES5). JSON, Object.create
- 2012: ECMAScript 6 (ES6). Modulos, Proxys
- 2012: Navigation Timing
- 2012: HTML5 Web Messaging
- 2012: Web Workers
- 2012: WebSocket
- 2013: Web Storage
- 2013: Touch Events
- 2013: Geolocation API
- 2013: Performance Timeline
- 2013: Web Notifications
- 2013: File API
- 2013: Messaging API
- 2013: Web Telephony API
- 2013: MediaStream Image Capture
- 2013: WebRTC 1.0
- 2013: Web Audio API
- 2014: Progress Events
- 2014: Indexed Database
- 2014: Server Sent Events (SSE)
- 2014: Web Cryptography API
- 2014: Web NFC API
- 2014: XMLHttpRequest Level 1
- 2014: Push API
- 2014: Streams API
- 2014: Screen Orientation API
- 2014: Service Workers
- 2014: TCP and UDP Socket API
- 2014: URL
- 2014: Clipboard API and Events
- 2015: ECMA-262 (6th Edition). ECMAScript 2015 Language Specification
3. APIs de JavaScript
- Document Object Model (DOM)
-) HTML: Document, Element, Event, HTML..., Node, NodeList, ParentNode, etc.
-) XML: XMLDocument.
-) SVG: Scalable Vector Graphics
- Gráficos
-) Canvas: CanvasGradient, CanvasRenderingContext2D, HTMLCanvasElement, ImageData.
-) SVG: SVGAnimate, SVGAnimated, SVGColor, SVGElement, SGVFont, SVGPath, SVGText.
-) WebGL: WebGLBuffer, WebGLObject, WebGLRenderbuffer, WebGLRenderingContext, etc.
- Almacenamiento
-) File API: Blob, File, FileList, FileReader, FileReaderSync, URL.
-) IndexedDB: IDBCursor, IDBDataBase, IDBFactory, IDBIndex, IDBObjectStore, etc.
-) Web Storage: Storage, StorageEvent, WindowLocalStorage, WindowSessionStorage.
- Conectividad
-) Web Sockets: BroadcastChannel, CloseEvent, EventSource, PortCollection, WebSocket.
-) Messaging: MessageChannel, MessageEvent, MessagePort.
-) WebRTC: RTCPeerConnection, RTCIceServer, RTCIceCandidate, RTCDataChannel, etc.
- Acceso:
-) Drag And Drop (D&D): DataTransfer, DataTransferItem, DataTransferItemList, DragEvent.
-) FullScreen: Document (fullscreenElement, fullscreenEnabled), Element (requestFullscreen).
- Estilos
-) CSS Object Model: CSS, CSSRule, CSSStyleSheet, MediaList, StyleSheet, etc.
-) Selectors: Document (querySelector, querySelectorAll), DocumentFragment, Element.
- Multimedia
-) Animation Timing: Window (cancelAnimationFrame, requestAnimationFrame).
-) Media: AudioTrack, HTMLMediaElement, HTMLTrackElement, MediaController, VideoTrack.
-) Pointer Lock: Document (exitPointerLock), Element (requestPointerLock), MouseEvent.
-) Web Audio: AnalyserNode, AudioBuffer, AudioListener, AudioParam, DelayNode, GainNode.
- Performance
-) Browser: History, ImageBitmap, Location, MimeType, Navigator, WindowBase64 (atob, btoa),
WindowTimers (clearInterval, clearTimeout, setInterval, setTimeout), etc.
-) Typed Arrays: ArrayBuffer, ArrayBufferView, DataView, Float..Array, Int..Array, Uint..Array.
-) Web Workers: AbstractWorker, SharedWorker, Worker, WorkerLocation, WorkerNavigator, etc.
- Componentes Web
-) Shadow DOM: CSSHostRule, CSSRule, Element (createShadowRoot), ShadowRoot, etc.
-) Custom Elements: Element (customElements.define)
-) HTML Imports: HTMLLinkElement (rel=import), Document (write, close).
- ECMAScript
-) Tipos de Datos Primitivos: Boolean, Null, Undefined, Number, String, Symbol (ES6).
-) Tipos Objetos: Array, Date, Error, Function, Global, JSON, Math, Object, RegExp.
-) Colección de Claves (Objetos): Maps, Sets, WeakMaps, WeakSets.
- Seguridad Web (WebCryptography)
-) Clases: Crypto, Algorithm, KeyAlgorithm, CryptoKey, SubtleCrypto, etc.
-) Operaciones: encrypt, decrypt, sign, verify, deriveBits, wrapKey, unwrapKey,
generateKey, importKey, exportKey, getLength.
-) Algoritmos: RSASSA-PKCS1-v1_5, RSA-PSS, RSA-OAEP, ECDSA, ECDH, AES-CBC,
HMAC, DH, SHA-1, SHA-256, SHA-384, SHA-512, CONCAT, HKDF-CTR, PBKDF2, etc.
- Comunicación Asíncrona con el Servidor:
-) Cliente al Servidor: XmlHttpRequest (XHR)
-) Servidor al Cliente: Server-Send Events (SSE)
-) Bidireccional: Web Sockets
4. Cronología de Librerías y Frameworks de JavaScript (11 años)
- 2004: Dojo Toolkit (Alex Russell)
- 2005: Prototype JavaScript Framework (Sam Stephenson)
- 2005: Script.aculo.us (Thomas Fuchs)
- 2006: Yahoo UI Library (YUI)
- 2006: Google Web Toolkit (GWT)
- 2006: jQuery (John Resig)
- 2006: MooTools (Valerio Proietti)
- 2007: ExtJS (Jack Slocum)
- 2007: WaveMaker (Scott Miles)
- 2007: jQuery UI (Scott González, Adam Sontag, etc)
- 2008: Processing.js (John Resig)
- 2008: QUnit (John Resig)
- 2009: CofeeScript (Jeremy Ashkenas)
- 2009: Glow (BBC)
- 2009: Raphaël (Dmitry Baranovskiy)
- 2009: NodeJS (Ryan Dahl)
- 2010: BackboneJS (Jeremy Ashkenas)
- 2010: KnockoutJS (Steve Sanderson)
- 2010: AngularJS (Misko Hevery)
- 2010: Three.js (Ricardo Cabello)
- 2010: jQuery Mobile (jQuery Foundation)
- 2010: Jasmine (Pivotal Labs)
- 2011: Dart (Lars Bak, Kasper Lund)
- 2011: Ember.js (Yehuda Katz, Tom Dale)
- 2011: Modernizr (Paul Irish)
- 2011: D3.js (Bostock, Heer, Ogievetsky)
- 2011: Kendo UI (Telerik)
- 2011: Unit.js (Nicolas Tallefourtane)
- 2012: TypeScript (Anders Hejlsberg)
- 2012: Bootstrap (Mark Otto, Jacob Thornton)
- 2012: Enyo.js (Palm, HP)
- 2012: Meteor (Meteor Development Group)
- 2012: ExpressJS (TJ Holowaychuk)
- 2013: Polymer (Google)
- 2013: X-Tag (Mozilla)
- 2013: Webix (XB Software)
- 2013: React (Jordan Walke)
- 2013: Sails.js (Mike McNeil)
- 2013: Snap.svg (Adobe)
- 2014: Underscore.js (Jeremy Ashkenas)
- 2014: Socket.io (Guillermo Rauch)
- 2015: Reac Native (Tom Ochinno, Christopher Chedeau)
- 2015: Aurelia.io (Rob Eisenberg)
5. Herramientas de JavaScript
5.1. Herramientas de Calidad del Código (JavaScript Code Quality Tools)
1. JSLint
- URL: http://www.jslint.com/
- Es la más antigua y fué creada por Douglas Crockford en el 2002
2. JSHint
- URL: http://jshint.com/
- Team: Rick Waldron, Caitlin Potter, Mike Sherov, Mike Pennisi, y Luke Page
3. JSCS (JavaScript Code Style checker)
- URL: http://jscs.info/
- Team: Marat Dulin, Oleg Gaidarenko, Mike Sherov, Joel Kemp, Alexej Yaroshevich, Henry Zhu
4. ESLint (Pluggable JavaScript Linter)
- URL: http://eslint.org/
- Originalmente creada por Nicholas C. Zakas en el 2013
- Actualmente mantenida por jQuery Foundation
- Usuarios: Algolia, Disqus, 2GIS
- Requerimientos: Node.js or io.js
- Sistemas Operativos: Windows, Mac, Linux
5.2. Herramientas de Pruebas Unitarias (JavaScript Unit Testing Tools)
1. QUnit (JavaScript Unit Testing framework)
- URL: https://qunitjs.com/
- Originalmente creada por Jhon Resign en el 2006 como parte de jQuery
- En el 2008 fue extraida de jQuery para ser independiente en el 2009
- Usos: jQuery, jQuery UI, jQuery Mobile
2. Unit.js (Unit testing framework for JavaScript)
- URL: http://unitjs.com/
- Creado por el Francés Nicolas Talle (Nicolab) en el 2014
- Requerimientos: Node.js y el Browser
3. Jasmine (Behavior-Driven JavaScript)
- URL: http://jasmine.github.io/
- Creada por Pivotal Labs en el 2010
4. Mocha (the fun, simple, flexible JavaScript test framework)
- URL: https://mochajs.org/
- Creada en el 2011 por la organización Mocha
- Requerimientos: Node.js y el Browser
- Usos: should.js, express.js, chai, better-assert, unexpected
- Usuarios: Sauce Labs, Yahoo
- Contribuidores: Christopher Hiller, Daniel St. Jules, ScottFreeCode, David Da Silva
6. Entrenamiento en JavaScript
6.1. Libros
6.2. Cursos Oficiales Microsoft Virtual Academy (MVA)
6.3. Tutoriales
6.4. Conferencias
6.5. Reuniones (Meetups)
6.6. En Vivo (Hangouts)
6.7. Documentación Oficial
- W3C
- ECMAScript
- HTML5 Org
- Guía de Internet Explorer 11 para desarrolladores (Microsoft)
- Mozilla Developer Network (MDN)
- HTML5 Rocks (Google)
- W3Schools.com
7. Comentario Final
En este artículo me propuse dar la mayor cantidad de información sobre JavaScript, ya que en muchos lugares todavía no se toma conciencia de la necesidad de trabajar lo mas desconectado posible y solo actualizar en tiempo real los datos cuando ocurran cambios, para lo cual es necesario conocer mas JavaScript.
Particularmente, en los últimos 3 años mi orientación de desarrollador, cambio radicalmente, hacia el lado del cliente usando JavaScript y priorizando la performance usando una arquitectura con pocos archivos y poco contenido lo cual tiene ventajas en velocidad incomparables.
Si bien es cierto, en la mayor parte del mundo se esta de acuerdo en que JavaScript es el número 1 por encima de Java, PHP, Phyton, Ruby, C#, C++, etc; donde no estoy de acuerdo es en el uso indiscriminado de Frameworks sobre todo de lado del cliente que "debilitan el rendimiento".
Los programadores tienen que entender que el Navegador (Browser) es un Framework con cientos de clases y métodos (APIs), las cuales detallamos en el tema 3 de este artículo: "APIs de JavaScript" y que no es necesario usar ninguna Librería ni Framework para hacer cualquier cosa (al final tanto las Librerías como los Frameworks usan dichas APIs).
Hay que invertir mas tiempo aprendiendo lo que nunca pasará de moda (lo nativo) y dejar de lado la moda (las Librerías y Frameworks, que salen por decenas en un año y en poco quedan obsoletas). De mi parte llevo enseñando mas de 3 años las APIs de JavaScript en cada curso, taller o capacitación que hago.
Lamentablemente, en muchas partes todavía se piensa que se debe hacer todo de lado del servidor y los que piensan lo contrario (hacerlo de lado del cliente) lo hacen usando Librerías o Frameworks, por tanto, mi arquitectura y mis técnicas de programación de lado del cliente con JavaScript son solo requeridas por un grupo reducido de seguidores, lo cual me apena mucho y me anima a dar un paso al costado, ya que el mercado laboral y el de entrenamiento es reducido (todos quieren lo estándar, nadie quiere cambiar 180 grados).
Si los programadores siguieran las técnicas usadas en mis capacitaciones, cursos o talleres verían la diferencia brutal de velocidad entre una pagina web clásica o moderna (MVC, SPA, etc.) con lo que nosotros hacemos en forma nativa con pocos archivos: un HTML, un CSS, un JavaScript y un Sprite.
Si les gusto no se olviden de dar Like y el que desea lo puede compartir en cualquier medio: Sitio Web, Google+, FaceBook, Twitter, solo mantener el nombre del creador. Los que están llevando el Taller de los Domingos no falten ya que es el último mes de mi último curso (aprovechen lo poco que queda).
Etiquetas:
AJAX,
APIs,
Artículos,
Brendan Eich,
Conferencias,
Developer,
DOM,
ECMAScript,
HTML5,
Javascript,
jQuery,
Lduenas,
Libros,
Meetups,
MVA,
NodeJS,
Testing,
Tools,
Tutoriales,
XHR
martes, 29 de marzo de 2016
El Libro del Día: ASP.NET jQuery Cookbook (2nd Edition)
El Libro del Día: 2016-03-29
Titulo: ASP.NET jQuery Cookbook (2nd Edition)
Autor: Sonal Aneel Allana
Editorial: Packt
Nro Paginas: 478
Capítulos:
Chapter 1: Getting Started with jQuery in ASP.NET
Chapter 2: Using jQuery Selectors with ASP.NET Controls
Chapter 3: Event Handling Using jQuery
Chapter 4: DOM Traversal and Manipulation in ASP.NET
Chapter 5: Visual Effects in ASP.NET Sites
Chapter 6: Working with Graphics in ASP.NET Sites
Chapter 7: Ajax Using jQuery
Chapter 8: Creating and Using jQuery Plugins
Descarga:
ASP.NET_jQuery_Cookbook_2nd_Edition
Titulo: ASP.NET jQuery Cookbook (2nd Edition)
Autor: Sonal Aneel Allana
Editorial: Packt
Nro Paginas: 478
Capítulos:
Chapter 1: Getting Started with jQuery in ASP.NET
Chapter 2: Using jQuery Selectors with ASP.NET Controls
Chapter 3: Event Handling Using jQuery
Chapter 4: DOM Traversal and Manipulation in ASP.NET
Chapter 5: Visual Effects in ASP.NET Sites
Chapter 6: Working with Graphics in ASP.NET Sites
Chapter 7: Ajax Using jQuery
Chapter 8: Creating and Using jQuery Plugins
Descarga:
ASP.NET_jQuery_Cookbook_2nd_Edition
Etiquetas:
.NET,
AJAX,
ASP.NET,
Controls,
Cookbook,
DOM,
Effects,
Event Handling,
Graphics,
Javascript,
jQuery,
Libros,
Manipulation,
Microsoft,
Packt,
Plugins,
Selectors,
Sites,
Sonal Aneel Allana,
Visual
viernes, 5 de febrero de 2016
El Libro del Día: Full Stack JavaScript
El Libro del Día: 2016-02-05
Titulo: Full Stack JavaScript. Learn Backbone.js, Node.js and MongoDB
Autor: Azat Mardan
Editorial: Apress
Nro Paginas: 208
Capítulos:
Chapter 1: Basics
Chapter 2: Setup
Chapter 3: jQuery and Parse
Chapter 4: Intro to Backbone.js
Chapter 5: Backbone.js and Parse.com
Chapter 6: Intro to Node.js
Chapter 7: Intro to MongoDB
Chapter 8: Putting It All Together
Appendix A: Conclusion and Further Reading
Descarga:
Full_Stack_JavaScript
Titulo: Full Stack JavaScript. Learn Backbone.js, Node.js and MongoDB
Autor: Azat Mardan
Editorial: Apress
Nro Paginas: 208
Capítulos:
Chapter 1: Basics
Chapter 2: Setup
Chapter 3: jQuery and Parse
Chapter 4: Intro to Backbone.js
Chapter 5: Backbone.js and Parse.com
Chapter 6: Intro to Node.js
Chapter 7: Intro to MongoDB
Chapter 8: Putting It All Together
Appendix A: Conclusion and Further Reading
Descarga:
Full_Stack_JavaScript
Etiquetas:
Apress,
Azat Mardan,
Backbone.js,
Basics,
Full Stack,
Javascript,
jQuery,
Libros,
MongoDB,
Node.js,
Parse,
Parse.com,
Setup
viernes, 15 de enero de 2016
El Libro del Día: AngularJS Directives Cookbook
El Libro del Día: 2016-01-15
Titulo: AngularJS Directives Cookbook
Autor: Fernando Monteiro
Editorial: Packt
Nro Paginas: 206
Capítulos:
Chapter 1: Dealing with Modal and Tabs Directives
Chapter 2: Building a Navbar Custom Directive
Chapter 3: Customizing and Using Bootstrap UI Directives
Chapter 4: Creating Interactive jQuery UI Directives
Chapter 5: Implementing Custom Directives with Yeoman Generators
Chapter 6: Using Directives to Develop Interface Components
Chapter 7: Building Directives with Dynamic Templates
Chapter 8: Creating Reusable Directives
Chapter 9: Directive Unit Testing with Karma and Jasmine
Descarga:
AngularJS_Directives_Cookbook
Titulo: AngularJS Directives Cookbook
Autor: Fernando Monteiro
Editorial: Packt
Nro Paginas: 206
Capítulos:
Chapter 1: Dealing with Modal and Tabs Directives
Chapter 2: Building a Navbar Custom Directive
Chapter 3: Customizing and Using Bootstrap UI Directives
Chapter 4: Creating Interactive jQuery UI Directives
Chapter 5: Implementing Custom Directives with Yeoman Generators
Chapter 6: Using Directives to Develop Interface Components
Chapter 7: Building Directives with Dynamic Templates
Chapter 8: Creating Reusable Directives
Chapter 9: Directive Unit Testing with Karma and Jasmine
Descarga:
AngularJS_Directives_Cookbook
Etiquetas:
AngularJS,
Bootstrap,
Components,
Cookbook,
Directives,
Dynamic Templates,
Fernando Monteiro,
Generators,
Interface,
Jasmine,
jQuery,
Karma,
Libros,
Modal,
Navbar,
Packt,
Reusable,
Tabs,
Unit Testing,
Yeoman
lunes, 11 de enero de 2016
El Libro del Día: Learning JavaScript
El Libro del Día: 2016-01-11
Titulo: Learning JavaScript (3rd Edition)
Autor: Ethan Brown
Editorial: O'Reilly
Nro Paginas: 347
Capítulos:
1. Your First Application
2. JavaScript Development Tools
3. Literal, Variables, Constants, and DataTypes
4. Control Flow
5. Expressions and Operators
6. Functions
7. Scope
8. Arrays and Array Processor
9. Objects and Object Oriented Programming
10. Maps and Sets
11. Exceptions and Error Handling
12. Iterators and Generators
13. Functions, and the Power of Abstract Thinking
14. Asynchronous Programming
15. Date and Time
16. Math
17. Regular Expressions
18. JavaScript in the Browser
19. jQuery
20. Node
21. Object Property Configuration and Proxies
22. Additional Resources
A. Reserved Words
B. Operator Precedence
Descarga:
Learning_JavaScript
Titulo: Learning JavaScript (3rd Edition)
Autor: Ethan Brown
Editorial: O'Reilly
Nro Paginas: 347
Capítulos:
1. Your First Application
2. JavaScript Development Tools
3. Literal, Variables, Constants, and DataTypes
4. Control Flow
5. Expressions and Operators
6. Functions
7. Scope
8. Arrays and Array Processor
9. Objects and Object Oriented Programming
10. Maps and Sets
11. Exceptions and Error Handling
12. Iterators and Generators
13. Functions, and the Power of Abstract Thinking
14. Asynchronous Programming
15. Date and Time
16. Math
17. Regular Expressions
18. JavaScript in the Browser
19. jQuery
20. Node
21. Object Property Configuration and Proxies
22. Additional Resources
A. Reserved Words
B. Operator Precedence
Descarga:
Learning_JavaScript
Etiquetas:
Arrays,
Asynchronous,
DataTypes,
Ethan Brown,
Exceptions,
Expressions,
Functions,
Iterators,
Javascript,
jQuery,
Learning,
Libros,
Maps,
Node,
O'Reilly,
OOP,
Operators,
Scope,
Sets,
Variables
miércoles, 6 de enero de 2016
Entrenamiento - Vacantes para el Curso de Desarrollo Web de los Domingos
Vacantes para el Curso de Desarrollo Web de los Domingos
Estimados alumnos, este Domingo 10 de Enero iniciamos el segundo mes del curso de Desarrollo Web Desconectado Total usando JavaScript, HTML5 y CSS3 (80% de código cliente y 20% código servidor aproximadamente).
Hay 10 nuevas vacantes para cubrir el total de la capacidad y los interesados solo deben un mail de confirmación a Luis.duenash@gmail.com con su Nombre Completo y si ha sido ex-alumno o no. El costo del curso es de 200 soles por 4 sesiones de 6 horas, es decir 24 horas.
El horario son los Domingos de 8:00 am a 2:00 pm y se realiza en el cono Norte, la dirección exacta será enviada por mail a los confirmados. Los interesados tener en cuenta el lugar y que no es curso tradicional, no se dará certificados, diplomas, recibos, etc.
Los que asisten a mis cursos y talleres saben que cada semana tenemos temas muy interesantes que tratamos que serán la base del desarrollo web moderno: desconectado total y nativo, dando énfasis a las APIs de JavaScript y creando código óptimo.
Muchos han estado preguntando sobre cursos y les he dicho que ya no dicto regularmente, excepto este curso de los Domingos, y los que alguna vez ya llevaron conmigo los temas son totalmente distintos, además hay mucha teoría sobre cómo funciona Internet, el Navegador, .NET Framework, etc.
Recuerden que solo se registrará a los 10 primeros y de preferencia a ex-alumnos. Aprovechen que el costo del curso es muy bajo comparado con lo que se cobra en la mayoría de centros de capacitación por no aprender nada que solucione los problemas de la computación.
Sea lo que sea que te enseñen: C#, LINQ, Entity Framework, CodeFirst, AngularJS, KnockoutJS, jQuery, AJAX, Ember.JS, etc. te darás cuenta que los problemas de lentitud seguirán, y si apuestas por el Hardware aumentando mas disco, CPU, memoria, etc, tampoco dará resultados.
La solución completa es la que vemos en estos talleres y muchos alumnos ya están poniendo en práctica esta nueva forma de programar que es rápida en desarrollo y mas rápida en ejecución. Los visitantes de mi Blog y de mi canal de YouTube tienen que tener en cuenta que la mayoría de los Demos y Videos no son posteados, solo está accesible para los que siguen el curso.
Saludos
Estimados alumnos, este Domingo 10 de Enero iniciamos el segundo mes del curso de Desarrollo Web Desconectado Total usando JavaScript, HTML5 y CSS3 (80% de código cliente y 20% código servidor aproximadamente).
Hay 10 nuevas vacantes para cubrir el total de la capacidad y los interesados solo deben un mail de confirmación a Luis.duenash@gmail.com con su Nombre Completo y si ha sido ex-alumno o no. El costo del curso es de 200 soles por 4 sesiones de 6 horas, es decir 24 horas.
El horario son los Domingos de 8:00 am a 2:00 pm y se realiza en el cono Norte, la dirección exacta será enviada por mail a los confirmados. Los interesados tener en cuenta el lugar y que no es curso tradicional, no se dará certificados, diplomas, recibos, etc.
Los que asisten a mis cursos y talleres saben que cada semana tenemos temas muy interesantes que tratamos que serán la base del desarrollo web moderno: desconectado total y nativo, dando énfasis a las APIs de JavaScript y creando código óptimo.
Muchos han estado preguntando sobre cursos y les he dicho que ya no dicto regularmente, excepto este curso de los Domingos, y los que alguna vez ya llevaron conmigo los temas son totalmente distintos, además hay mucha teoría sobre cómo funciona Internet, el Navegador, .NET Framework, etc.
Recuerden que solo se registrará a los 10 primeros y de preferencia a ex-alumnos. Aprovechen que el costo del curso es muy bajo comparado con lo que se cobra en la mayoría de centros de capacitación por no aprender nada que solucione los problemas de la computación.
Sea lo que sea que te enseñen: C#, LINQ, Entity Framework, CodeFirst, AngularJS, KnockoutJS, jQuery, AJAX, Ember.JS, etc. te darás cuenta que los problemas de lentitud seguirán, y si apuestas por el Hardware aumentando mas disco, CPU, memoria, etc, tampoco dará resultados.
La solución completa es la que vemos en estos talleres y muchos alumnos ya están poniendo en práctica esta nueva forma de programar que es rápida en desarrollo y mas rápida en ejecución. Los visitantes de mi Blog y de mi canal de YouTube tienen que tener en cuenta que la mayoría de los Demos y Videos no son posteados, solo está accesible para los que siguen el curso.
Saludos
Etiquetas:
ADO.NET,
AJAX,
AngularJS,
APIs,
ASP.NET,
C#,
CodeFirst,
CSS3,
Cursos,
Desconectado,
Ember,
Entrenamiento,
HTML5,
Javascript,
jQuery,
Knockout,
Lduenas,
LINQ,
MVC,
Web Forms
lunes, 31 de agosto de 2015
Conferencias - Developer Day 2015 (CEPS UNI)
Developer Day 2015 (CEPS UNI)
Este Sabado 12 de Setiembre habrá un conjunto de Conferencias en la UNI, en la cual participaré como expositor. Le alcanzo los detalles de mi exposición y la publicidad del evento.
TITULO:
UNA NUEVA FORMA DE DESARROLLAR WEB PARA LA PERFORMANCE EN ASP.NET
HORARIO:
De 2:00 pm a 2:45 pm.
OBJETIVO:
Entender cómo mejorar la Performance en ASP.NET, ya sea en una página Web Form o una vista MVC usando un Serializador que devuelva los datos como cadena y construyendo el HTML en el cliente con JavaScript. Estas llamadas se realizaran en forma asíncrona con XmlHttpRequest (XHR).
DESCRIPCION:
Actualmente, la gran cantidad de usuarios de las aplicaciones web requieren nuevas técnicas de desarrollo para resolver el problema de la performance o velocidad de carga de las páginas que siguen un esquema tradicional que es hacer llamadas asíncronas con Ajax o jQuery, usar “Controles del Servidor” y devolver los datos en formato “JSON”.
La nueva forma propuesta consiste en enviar la menor cantidad de archivos en cada página (solo el Html, un archivo JS, un archivo CSS y las imágenes pequeñas como cadenas en formato Base64). Las llamadas se harán mediante XHR desde JavaScript y los datos se devolverán como cadenas que es 3 veces de menor tamaño que JSON y luego se creará dinámicamente como HTML.
Este Sabado 12 de Setiembre habrá un conjunto de Conferencias en la UNI, en la cual participaré como expositor. Le alcanzo los detalles de mi exposición y la publicidad del evento.
TITULO:
UNA NUEVA FORMA DE DESARROLLAR WEB PARA LA PERFORMANCE EN ASP.NET
HORARIO:
De 2:00 pm a 2:45 pm.
OBJETIVO:
Entender cómo mejorar la Performance en ASP.NET, ya sea en una página Web Form o una vista MVC usando un Serializador que devuelva los datos como cadena y construyendo el HTML en el cliente con JavaScript. Estas llamadas se realizaran en forma asíncrona con XmlHttpRequest (XHR).
DESCRIPCION:
Actualmente, la gran cantidad de usuarios de las aplicaciones web requieren nuevas técnicas de desarrollo para resolver el problema de la performance o velocidad de carga de las páginas que siguen un esquema tradicional que es hacer llamadas asíncronas con Ajax o jQuery, usar “Controles del Servidor” y devolver los datos en formato “JSON”.
La nueva forma propuesta consiste en enviar la menor cantidad de archivos en cada página (solo el Html, un archivo JS, un archivo CSS y las imágenes pequeñas como cadenas en formato Base64). Las llamadas se harán mediante XHR desde JavaScript y los datos se devolverán como cadenas que es 3 veces de menor tamaño que JSON y luego se creará dinámicamente como HTML.
BANNER
Etiquetas:
AJAX,
ASP.NET,
CEPS UNI,
Conferencias,
CSS,
Developer Day,
HTML,
Javascript,
jQuery,
JSON,
MVC,
Performance,
Serializadores,
XHR
jueves, 20 de agosto de 2015
El Libro del Día: Mastering jQuery
El Libro del Día: 2015-08-20
Titulo: Mastering jQuery
Autor: Alex Libby
Editorial: Packt
Nro Paginas: 400
Capítulos:
Chapter 1: Installing jQuery
Chapter 2: Customizing jQuery
Chapter 3: Organizing Your Code
Chapter 4: Working with Forms
Chapter 5: Integrating AJAX
Chapter 6: Animating in jQuery
Chapter 7: Advanced Event Handling
Chapter 8: Using jQuery Effects
Chapter 9: Using the Web Performance APIs
Chapter 10: Manipulating Images
Chapter 11: Authoring Advanced Plugins
Chapter 12: Using jQuery with the Node-WebKit Project
Chapter 13: Enhancing Performance in jQuery
Chapter 14: Testing jQuery
Descarga:
Mastering_jQuery
Titulo: Mastering jQuery
Autor: Alex Libby
Editorial: Packt
Nro Paginas: 400
Capítulos:
Chapter 1: Installing jQuery
Chapter 2: Customizing jQuery
Chapter 3: Organizing Your Code
Chapter 4: Working with Forms
Chapter 5: Integrating AJAX
Chapter 6: Animating in jQuery
Chapter 7: Advanced Event Handling
Chapter 8: Using jQuery Effects
Chapter 9: Using the Web Performance APIs
Chapter 10: Manipulating Images
Chapter 11: Authoring Advanced Plugins
Chapter 12: Using jQuery with the Node-WebKit Project
Chapter 13: Enhancing Performance in jQuery
Chapter 14: Testing jQuery
Descarga:
Mastering_jQuery
Etiquetas:
AJAX,
Alex Libby,
Animating,
APIs,
Code,
Customizing,
Effects,
Event Handling,
Forms,
Images,
Installing,
Javascript,
jQuery,
Libros,
Mastering,
Node WebKit,
Packt,
Plugins,
Testing,
Web Performance
miércoles, 19 de agosto de 2015
El Libro del Día: JavaScript JSON Cookbook
El Libro del Día: 2015-08-19
Titulo: JavaScript JSON Cookbook
Autor: Ray Rischpater
Editorial: Packt
Nro Paginas: 192
Capítulos:
Chapter 1: Reading and Writing JSON on the Client
Chapter 2: Reading and Writing JSON on the Server
Chapter 3: Using JSON in Simple AJAX Applications
Chapter 4: Using JSON in AJAX Applications with jQuery and AngularJS
Chapter 5: Using JSON with MongoDB
Chapter 6: Using JSON with CouchDB
Chapter 7: Using JSON in a Type-safe Manner
Chapter 8: Using JSON for Binary Data Transfer
Chapter 9: Querying JSON with JSONPath and LINQ
Chapter 10: JSON on Mobile Platforms
Descarga:
JavaScript_JSON_Cookbook
Titulo: JavaScript JSON Cookbook
Autor: Ray Rischpater
Editorial: Packt
Nro Paginas: 192
Capítulos:
Chapter 1: Reading and Writing JSON on the Client
Chapter 2: Reading and Writing JSON on the Server
Chapter 3: Using JSON in Simple AJAX Applications
Chapter 4: Using JSON in AJAX Applications with jQuery and AngularJS
Chapter 5: Using JSON with MongoDB
Chapter 6: Using JSON with CouchDB
Chapter 7: Using JSON in a Type-safe Manner
Chapter 8: Using JSON for Binary Data Transfer
Chapter 9: Querying JSON with JSONPath and LINQ
Chapter 10: JSON on Mobile Platforms
Descarga:
JavaScript_JSON_Cookbook
Etiquetas:
AJAX,
AngularJS,
Binary Data,
Client,
Cookbook,
CouchDB,
Javascript,
jQuery,
JSON,
JSONPath,
Libros,
LINQ,
Mobile,
MongoDB,
Packt,
Ray Rischpater,
Reading,
Server,
Type safe,
Writing
lunes, 10 de agosto de 2015
El Libro del Día: Mastering JavaScript Promises
El Libro del Día: 2015-08-10
Titulo: Mastering JavaScript Promises
Autor: Muzzamil Hussain
Editorial: Packt
Nro Paginas: 188
Capítulos:
Chapter 1: Promises.js
Chapter 2: The JavaScript Asynchronous Model
Chapter 3: The Promise Paradigm
Chapter 4: Implementing Promises
Chapter 5: Promises in WinRT
Chapter 6: Promises in Node.js
Chapter 7: Promises in Angular.js
Chapter 8: Promises in jQuery
Chapter 9: JavaScript The Future Is Now
Descarga:
Mastering_JavaScript_Promises
Titulo: Mastering JavaScript Promises
Autor: Muzzamil Hussain
Editorial: Packt
Nro Paginas: 188
Capítulos:
Chapter 1: Promises.js
Chapter 2: The JavaScript Asynchronous Model
Chapter 3: The Promise Paradigm
Chapter 4: Implementing Promises
Chapter 5: Promises in WinRT
Chapter 6: Promises in Node.js
Chapter 7: Promises in Angular.js
Chapter 8: Promises in jQuery
Chapter 9: JavaScript The Future Is Now
Descarga:
Mastering_JavaScript_Promises
Etiquetas:
Angular.js,
Asynchronous,
Future Is Now,
Implementing,
Javascript,
jQuery,
Libros,
Mastering,
Model,
Muzzamil Hussain,
Node.js,
Packt,
Paradigm,
Promises,
Promises.js,
WinRT
viernes, 24 de julio de 2015
El Libro del Día: Practical jQuery
El Libro del Día: 2015-07-24
Titulo: Practical jQuery
Autor: Mukund Chaudhary, Ankur Kumar
Editorial: Apress
Nro Paginas: 305
Capítulos:
Chapter 1: Evolution of jQuery
Chapter 2: Getting Started with jQuery
Chapter 3: Traversing DOM with jQuery
Chapter 4: DOM Manipulation with jQuery
Chapter 5: Events in jQuery
Chapter 6: Real World Events in jQuery
Chapter 7: Animation in jQuery
Chapter 8: Ajax with jQuery
Chapter 9: Creating Plug-ins with jQuery
Chapter 10: Integrating Plug-ins with jQuery
Chapter 11: Using jQuery Frameworks
Chapter 12: Testing jQuery with QUnit
Descarga:
Practical_jQuery
Titulo: Practical jQuery
Autor: Mukund Chaudhary, Ankur Kumar
Editorial: Apress
Nro Paginas: 305
Capítulos:
Chapter 1: Evolution of jQuery
Chapter 2: Getting Started with jQuery
Chapter 3: Traversing DOM with jQuery
Chapter 4: DOM Manipulation with jQuery
Chapter 5: Events in jQuery
Chapter 6: Real World Events in jQuery
Chapter 7: Animation in jQuery
Chapter 8: Ajax with jQuery
Chapter 9: Creating Plug-ins with jQuery
Chapter 10: Integrating Plug-ins with jQuery
Chapter 11: Using jQuery Frameworks
Chapter 12: Testing jQuery with QUnit
Descarga:
Practical_jQuery
Etiquetas:
AJAX,
Animation,
Ankur Kumar,
Apress,
DOM,
Events,
Evolution,
Frameworks,
Javascript,
jQuery,
Libros,
Mukund Chaudhary,
Plug-ins,
Practical,
QUnit,
Testing
martes, 7 de julio de 2015
Videos - Curso ASP.NET MVC Editora Perú (Parte 1)
Videos del Curso de ASP.NET MVC en Editora Perú (Parte 1)
Comparto la primera parte del Curso de ASP.NET MVC realizado en Editora Perú (Diario El Peruano y Agencia de Noticias Andina), en donde casi todos los demos son en forma asíncrona con la mejor performance (XmlHttpRequest y Strings).
Demo 10 - Consulta Conectada Sincrona con Todo el HTML
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
Para mostrar los datos del filtro se vuelve a mostrar la Vista completa, es decir todo el HTML, por lo cual se ve el parpadeo.
Demo 11 - Consulta Conectada Asincrona con Ajax Form y Vista Parcial
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
A diferencia del demo anterior, la consulta es asíncrona usando un Formulario Ajax y una Vista Parcial que solo muestra la tabla de productos, por lo que no ocurre el parpadeo.
Demo 12 - Consulta Conectada Asincrona con jQuery Ajax y JSON
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
A diferencia del demo anterior, la consulta es asíncrona usando jQuery Ajax y JSON que disminuye los datos enviados al cliente en casi la mitad con respecto a la vista parcial.
Demo 13 - Consulta Conectada Asincrona con jQuery Ajax y String
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
A diferencia del demo anterior, la consulta es asíncrona usando jQuery Ajax y Strings para lo cual se crea un Serializador que permite convertir la Lista de Objetos en Cadenas separadas por un delimitador de campos y otro de registros.
Esta técnica permite reducir los datos enviados al cliente en casi la tercera parte con respecto a JSON, es decir, el HTML es el 100%, Vista Parcial 50%, JSON 25% y Strings 8%. Esta última tecnica que propongo es la máxima en Performance.
Demo 14 - Consulta Desconectada Parcial Asincrona con jQuery Ajax y String
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma desconectada parcial, es decir, desconectada de la base de datos, pero conectada al servidor web.
La consulta es asíncrona usando jQuery Ajax y Strings para lo cual se crea un Serializador que permite convertir la Lista de Objetos en Cadenas separadas por un delimitador de campos y otro de registros.
En el Servidor Web los datos se guardan en un TempData al inicio y luego se recuperan cada vez que se filtra, viajando solo una cadena conteniendo los productos por categoría.
Demo 15 - Consulta Desconectada Total Asincrona con jQuery Ajax y String
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma desconectada total, es decir, desconectada de la base de datosy del servidor web.
La consulta es asíncrona usando jQuery Ajax y Strings para lo cual se crea un Serializador que permite convertir la Lista de Objetos en Cadenas separadas por un delimitador de campos y otro de registros.
Todos los datos de categorias y productos se envian al cliente, pero solo se guardan los productos para poder filtrarse por JavaScript.
Los alumnos que alguna vez llevaron conmigo ASP.NET MVC, se daran cuenta que la forma como estamos programando es un poco diferente, ya que uso mas JavaScript y menos C#.
Comparto la primera parte del Curso de ASP.NET MVC realizado en Editora Perú (Diario El Peruano y Agencia de Noticias Andina), en donde casi todos los demos son en forma asíncrona con la mejor performance (XmlHttpRequest y Strings).
Demo 10 - Consulta Conectada Sincrona con Todo el HTML
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
Para mostrar los datos del filtro se vuelve a mostrar la Vista completa, es decir todo el HTML, por lo cual se ve el parpadeo.
Demo 11 - Consulta Conectada Asincrona con Ajax Form y Vista Parcial
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
A diferencia del demo anterior, la consulta es asíncrona usando un Formulario Ajax y una Vista Parcial que solo muestra la tabla de productos, por lo que no ocurre el parpadeo.
Demo 12 - Consulta Conectada Asincrona con jQuery Ajax y JSON
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
A diferencia del demo anterior, la consulta es asíncrona usando jQuery Ajax y JSON que disminuye los datos enviados al cliente en casi la mitad con respecto a la vista parcial.
Demo 13 - Consulta Conectada Asincrona con jQuery Ajax y String
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma conectada, es decir, consultando en cada momento a la base de datos usando librerías.
A diferencia del demo anterior, la consulta es asíncrona usando jQuery Ajax y Strings para lo cual se crea un Serializador que permite convertir la Lista de Objetos en Cadenas separadas por un delimitador de campos y otro de registros.
Esta técnica permite reducir los datos enviados al cliente en casi la tercera parte con respecto a JSON, es decir, el HTML es el 100%, Vista Parcial 50%, JSON 25% y Strings 8%. Esta última tecnica que propongo es la máxima en Performance.
Demo 14 - Consulta Desconectada Parcial Asincrona con jQuery Ajax y String
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma desconectada parcial, es decir, desconectada de la base de datos, pero conectada al servidor web.
La consulta es asíncrona usando jQuery Ajax y Strings para lo cual se crea un Serializador que permite convertir la Lista de Objetos en Cadenas separadas por un delimitador de campos y otro de registros.
En el Servidor Web los datos se guardan en un TempData al inicio y luego se recuperan cada vez que se filtra, viajando solo una cadena conteniendo los productos por categoría.
Demo 15 - Consulta Desconectada Total Asincrona con jQuery Ajax y String
En este video se muestra una aplicación que permite filtrar los productos por categoría en forma desconectada total, es decir, desconectada de la base de datosy del servidor web.
La consulta es asíncrona usando jQuery Ajax y Strings para lo cual se crea un Serializador que permite convertir la Lista de Objetos en Cadenas separadas por un delimitador de campos y otro de registros.
Todos los datos de categorias y productos se envian al cliente, pero solo se guardan los productos para poder filtrarse por JavaScript.
Los alumnos que alguna vez llevaron conmigo ASP.NET MVC, se daran cuenta que la forma como estamos programando es un poco diferente, ya que uso mas JavaScript y menos C#.
Etiquetas:
AJAX,
Ajax Form,
Asíncrono,
ASP.NET,
C#,
Conectado,
Desconectado,
Editora Perú,
Filtros,
HTML,
Javascript,
jQuery,
JSON,
MVC,
Serialización,
Síncrono,
Strings,
Videos,
Vista Parcial,
XMLHttpRequest
jueves, 25 de junio de 2015
El Libro del Día: HTML5, JavaScript, and jQuery
El Libro del Día: 2015-06-25
Titulo: HTML5, JavaScript, and jQuery. 24 Hour Trainer
Autor: Dane Cameron
Editorial: Wrox
Nro Paginas: 411
Capítulos:
PART I: HTML AND CSS
LESSON 1: INTRODUCTION TO HTML5
LESSON 2: BASIC HTML
LESSON 3: LISTS AND TABLES
LESSON 4: INTRODUCTION TO CSS
LESSON 5: STRUCTURING PAGES WITH CSS
LESSON 6: HTML FORMS
LESSON 7: SEMANTIC TAGS
LESSON 8: HTML5 VALIDATION
LESSON 9: DRAG AND DROP
LESSON 10: DYNAMIC ELEMENTS
PART II: DYNAMIC HTML5 WEB APPLICATIONS WITH JAVASCRIPT AND JQUERY
LESSON 11: JAVASCRIPT 95
LESSON 12: DEBUGGING
LESSON 13: FUNCTIONS
LESSON 14: OBJECTS
LESSON 15: JSON
LESSON 16: DOCUMENT OBJECT MODEL
LESSON 17: JQUERY SELECTION
LESSON 18: JQUERY TRAVERSAL AND MANIPULATION
LESSON 19: JQUERY EVENTS
LESSON 20: DATA ATTRIBUTES AND TEMPLATES
LESSON 21: JQUERY PLUGINS
PART III: HTML5 MULTIMEDIA
LESSON 22: HTML5 AUDIO
LESSON 23: HTML5 VIDEO
LESSON 24: CANVAS: PART I
LESSON 25: CANVAS: PART II
LESSON 26: CSS3: PART I
LESSON 27: CSS3: PART II
LESSON 28: CSS3 MEDIA QUERIES
PART IV: HTML5 APIS
LESSON 29: WEB SERVERS
LESSON 30: WEB STORAGE
LESSON 31: INDEXEDDB
LESSON 32: APPLICATION CACHE
LESSON 33: WEB WORKERS
LESSON 34: FILES
LESSON 35: AJAX
LESSON 36: PROMISES
PART V: MOBILE
LESSON 37: RESPONSIVE WEB DESIGN
LESSON 38: LOCATION API
LESSON 39: JQUERY MOBILE: PART I
LESSON 40: JQUERY MOBILE: PART II
Descarga:
HTML5_JavaScript_and_jQuery_24_Hour_Trainer
Titulo: HTML5, JavaScript, and jQuery. 24 Hour Trainer
Autor: Dane Cameron
Editorial: Wrox
Nro Paginas: 411
Capítulos:
PART I: HTML AND CSS
LESSON 1: INTRODUCTION TO HTML5
LESSON 2: BASIC HTML
LESSON 3: LISTS AND TABLES
LESSON 4: INTRODUCTION TO CSS
LESSON 5: STRUCTURING PAGES WITH CSS
LESSON 6: HTML FORMS
LESSON 7: SEMANTIC TAGS
LESSON 8: HTML5 VALIDATION
LESSON 9: DRAG AND DROP
LESSON 10: DYNAMIC ELEMENTS
PART II: DYNAMIC HTML5 WEB APPLICATIONS WITH JAVASCRIPT AND JQUERY
LESSON 11: JAVASCRIPT 95
LESSON 12: DEBUGGING
LESSON 13: FUNCTIONS
LESSON 14: OBJECTS
LESSON 15: JSON
LESSON 16: DOCUMENT OBJECT MODEL
LESSON 17: JQUERY SELECTION
LESSON 18: JQUERY TRAVERSAL AND MANIPULATION
LESSON 19: JQUERY EVENTS
LESSON 20: DATA ATTRIBUTES AND TEMPLATES
LESSON 21: JQUERY PLUGINS
PART III: HTML5 MULTIMEDIA
LESSON 22: HTML5 AUDIO
LESSON 23: HTML5 VIDEO
LESSON 24: CANVAS: PART I
LESSON 25: CANVAS: PART II
LESSON 26: CSS3: PART I
LESSON 27: CSS3: PART II
LESSON 28: CSS3 MEDIA QUERIES
PART IV: HTML5 APIS
LESSON 29: WEB SERVERS
LESSON 30: WEB STORAGE
LESSON 31: INDEXEDDB
LESSON 32: APPLICATION CACHE
LESSON 33: WEB WORKERS
LESSON 34: FILES
LESSON 35: AJAX
LESSON 36: PROMISES
PART V: MOBILE
LESSON 37: RESPONSIVE WEB DESIGN
LESSON 38: LOCATION API
LESSON 39: JQUERY MOBILE: PART I
LESSON 40: JQUERY MOBILE: PART II
Descarga:
HTML5_JavaScript_and_jQuery_24_Hour_Trainer
Etiquetas:
AJAX,
Canvas,
CSS3,
Dane Cameron,
DOM,
Drag & Drop,
Forms,
HTML5,
IndexedDB,
Javascript,
jQuery,
JSON,
Libros,
Lists,
Media Queries,
Multimedia,
Tables,
Validation,
Web Storages,
Wrox
miércoles, 24 de junio de 2015
El Libro del Día: Beginning JavaScript
El Libro del Día: 2015-06-24
Titulo: Beginning JavaScript
Autor: Jeremy McPeak, Paul Wilton
Editorial: Wrox
Nro Paginas: 771
Capítulos:
Chapter 1: Introduction to JavaScript and the Web
Chapter 2: Data Types and Variables
Chapter 3: Decisions and Loops
Chapter 4: Functions and Scope
Chapter 5: JavaScript An Object Based Language
Chapter 6: String Manipulation
Chapter 7: Date, Time, and Timers
Chapter 8: Programming the Browser
Chapter 9: DOM Scripting
Chapter 10: Events
Chapter 11: HTML Forms: Interacting with the User
Chapter 12: JSON
Chapter 13: Data Storage
Chapter 14: Ajax
Chapter 15: HTML5 Media
Chapter 16: jQuery
Chapter 17: Other JavaScript Libraries
Chapter 18: Common Mistakes, Debugging, and Error Handling
Descarga:
Beginning_JavaScript
Titulo: Beginning JavaScript
Autor: Jeremy McPeak, Paul Wilton
Editorial: Wrox
Nro Paginas: 771
Capítulos:
Chapter 1: Introduction to JavaScript and the Web
Chapter 2: Data Types and Variables
Chapter 3: Decisions and Loops
Chapter 4: Functions and Scope
Chapter 5: JavaScript An Object Based Language
Chapter 6: String Manipulation
Chapter 7: Date, Time, and Timers
Chapter 8: Programming the Browser
Chapter 9: DOM Scripting
Chapter 10: Events
Chapter 11: HTML Forms: Interacting with the User
Chapter 12: JSON
Chapter 13: Data Storage
Chapter 14: Ajax
Chapter 15: HTML5 Media
Chapter 16: jQuery
Chapter 17: Other JavaScript Libraries
Chapter 18: Common Mistakes, Debugging, and Error Handling
Descarga:
Beginning_JavaScript
Etiquetas:
AJAX,
Beginning,
Browser,
Decisions,
DOM,
Events,
Forms,
Functions,
Javascript,
Jeremy McPeak,
jQuery,
JSON,
Libros,
Loops,
Paul Wilton,
String,
Timers,
Types,
Variables,
Wrox
lunes, 23 de marzo de 2015
El Demo del Día: Paginación y Ordenación Asíncrona en ASP.NET MVC con Ajax ActionLink y Vista Parcial
Paginación y Ordenación Asíncrona en ASP.NET MVC con Ajax ActionLink y Vista Parcial
Luego de casi un mes de no publicar un Demo, esta semana vamos a publicar uno diario para nivelarnos. En esta ocasión veremos como paginar y ordenar en forma asíncrona en ASP.NET MVC usando el control Helper Ajax.ActionLink y una Vista Parcial.
Requerimiento
Se desea crear una aplicación web en ASP.NET MVC que permita consultar la lista de empleados, dando la posibilidad de mostrar por páginas y ordenar los registros en forma ascendente y descendente por cada columna mostrada.
El requerimiento debe acompañarse de una buena experiencia de usuario que permita actualizar los datos al paginar u ordenar sin refrescar toda la pantalla.
Solución
Usaremos los controles Ajax.ActionLink tanto para la ordenación como la paginación, los cuales realizarán una llamada asíncrona (internamente usan jQuery Ajax) y actualizarán la vista mediante una vista parcial con los empleados.
Crear el Procedimiento Almacenado en la Base de Datos Northwind de SQL Server
Para listar los datos de los empleados crear el procedimiento "uspEmployeesListar":
Create procedure [dbo].[uspEmployeesListar]
As
Select EmployeeId,LastName,FirstName,IsNull(BirthDate,'1/1/1900') as Birthdate
From Employees
Crear una Librería de Entidades de Negocio para Northwind
Crear una librería de clases "Northwind.Librerias.EntidadesNegocio" con una clase llamada "beEmpleado" que tenga el siguiente código:
using System;
namespace Northwind.Librerias.EntidadesNegocio
{
public class beEmpleado
{
public int IdEmpleado { get; set; }
public string Apellido { get; set; }
public string Nombre { get; set; }
public DateTime FechaNacimiento { get; set; }
public byte[] Foto { get; set; }
}
}
Crear una Librería de Acceso a Datos para Northwind
Crear una librería de clases "Northwind.Librerias.AccesoDatos" con una clase llamada "daEmpleado" que tenga el siguiente código:
namespace Northwind.Librerias.AccesoDatos
{
public class daEmpleado
{
public List<beEmpleado> Listar(SqlConnection con)
{
List<beEmpleado> lbeEmpleado = null;
SqlCommand cmd = new SqlCommand("uspEmployeesListar", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
if (drd != null)
{
lbeEmpleado = new List<beEmpleado>();
beEmpleado obeEmpleado;
int posIdEmpleado = drd.GetOrdinal("EmployeeID");
int posApellido = drd.GetOrdinal("LastName");
int posNombre = drd.GetOrdinal("FirstName");
int posFechaNacimiento = drd.GetOrdinal("BirthDate");
while (drd.Read())
{
obeEmpleado = new beEmpleado();
obeEmpleado.IdEmpleado = drd.GetInt32(posIdEmpleado);
obeEmpleado.Apellido = drd.GetString(posApellido);
obeEmpleado.Nombre = drd.GetString(posNombre);
obeEmpleado.FechaNacimiento = drd.GetDateTime(posFechaNacimiento);
lbeEmpleado.Add(obeEmpleado);
}
drd.Close();
}
return (lbeEmpleado);
}
}
}
Nota: Hay que referenciar a la librería de entidades de negocio anteriormente creada.
Crear una Librería de Reglas de Negocio para Northwind
Crear una librería de clases "Northwind.Librerias.AccesoDatos" con una clase llamada "daEmpleado" que tenga el siguiente código:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Configuration;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.AccesoDatos;
namespace Northwind.Librerias.ReglasNegocio
{
public class brEmpleado
{
public List<beEmpleado> Listar()
{
List<beEmpleado> lbeEmpleado = null;
string CadenaConexion = ConfigurationManager.
ConnectionStrings["conNW"].ConnectionString;
using (SqlConnection con = new SqlConnection(CadenaConexion))
{
try
{
con.Open();
daEmpleado odaEmpleado = new daEmpleado();
lbeEmpleado = odaEmpleado.Listar(con);
}
catch (SqlException ex)
{
foreach (SqlError err in ex.Errors)
{
//GrabarLog
}
}
catch (Exception ex)
{
//GrabarLog
}
} //con.close(); con.Dispose();
return (lbeEmpleado);
}
}
}
Nota: Hay que referenciar a las librería "System.Configuration", la librería de entidades de negocio y de acceso a datos.
Crear una Aplicación Web de ASP.NET MVC4 en C#
Abrir el Visual Studio 2012 y seleccionar un nuevo proyecto de tipo: "Aplicación web de ASP.NET MVC4".
Escribir como nombre "Demo09" y "Aceptar", en el siguiente diálogo seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".
Antes de empezar a programar debemos referenciar las librerías anteriormente creadas, es decir, la librería de entidades del negocio, de acceso a datos y de reglas del negocio de Northwind.
Luego de casi un mes de no publicar un Demo, esta semana vamos a publicar uno diario para nivelarnos. En esta ocasión veremos como paginar y ordenar en forma asíncrona en ASP.NET MVC usando el control Helper Ajax.ActionLink y una Vista Parcial.
Requerimiento
Se desea crear una aplicación web en ASP.NET MVC que permita consultar la lista de empleados, dando la posibilidad de mostrar por páginas y ordenar los registros en forma ascendente y descendente por cada columna mostrada.
El requerimiento debe acompañarse de una buena experiencia de usuario que permita actualizar los datos al paginar u ordenar sin refrescar toda la pantalla.
Solución
Usaremos los controles Ajax.ActionLink tanto para la ordenación como la paginación, los cuales realizarán una llamada asíncrona (internamente usan jQuery Ajax) y actualizarán la vista mediante una vista parcial con los empleados.
Crear el Procedimiento Almacenado en la Base de Datos Northwind de SQL Server
Para listar los datos de los empleados crear el procedimiento "uspEmployeesListar":
Create procedure [dbo].[uspEmployeesListar]
As
Select EmployeeId,LastName,FirstName,IsNull(BirthDate,'1/1/1900') as Birthdate
From Employees
Crear una Librería de Entidades de Negocio para Northwind
Crear una librería de clases "Northwind.Librerias.EntidadesNegocio" con una clase llamada "beEmpleado" que tenga el siguiente código:
using System;
namespace Northwind.Librerias.EntidadesNegocio
{
public class beEmpleado
{
public int IdEmpleado { get; set; }
public string Apellido { get; set; }
public string Nombre { get; set; }
public DateTime FechaNacimiento { get; set; }
public byte[] Foto { get; set; }
}
}
Crear una Librería de Acceso a Datos para Northwind
Crear una librería de clases "Northwind.Librerias.AccesoDatos" con una clase llamada "daEmpleado" que tenga el siguiente código:
namespace Northwind.Librerias.AccesoDatos
{
public class daEmpleado
{
public List<beEmpleado> Listar(SqlConnection con)
{
List<beEmpleado> lbeEmpleado = null;
SqlCommand cmd = new SqlCommand("uspEmployeesListar", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
if (drd != null)
{
lbeEmpleado = new List<beEmpleado>();
beEmpleado obeEmpleado;
int posIdEmpleado = drd.GetOrdinal("EmployeeID");
int posApellido = drd.GetOrdinal("LastName");
int posNombre = drd.GetOrdinal("FirstName");
int posFechaNacimiento = drd.GetOrdinal("BirthDate");
while (drd.Read())
{
obeEmpleado = new beEmpleado();
obeEmpleado.IdEmpleado = drd.GetInt32(posIdEmpleado);
obeEmpleado.Apellido = drd.GetString(posApellido);
obeEmpleado.Nombre = drd.GetString(posNombre);
obeEmpleado.FechaNacimiento = drd.GetDateTime(posFechaNacimiento);
lbeEmpleado.Add(obeEmpleado);
}
drd.Close();
}
return (lbeEmpleado);
}
}
}
Nota: Hay que referenciar a la librería de entidades de negocio anteriormente creada.
Crear una Librería de Reglas de Negocio para Northwind
Crear una librería de clases "Northwind.Librerias.AccesoDatos" con una clase llamada "daEmpleado" que tenga el siguiente código:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Configuration;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.AccesoDatos;
namespace Northwind.Librerias.ReglasNegocio
{
public class brEmpleado
{
public List<beEmpleado> Listar()
{
List<beEmpleado> lbeEmpleado = null;
string CadenaConexion = ConfigurationManager.
ConnectionStrings["conNW"].ConnectionString;
using (SqlConnection con = new SqlConnection(CadenaConexion))
{
try
{
con.Open();
daEmpleado odaEmpleado = new daEmpleado();
lbeEmpleado = odaEmpleado.Listar(con);
}
catch (SqlException ex)
{
foreach (SqlError err in ex.Errors)
{
//GrabarLog
}
}
catch (Exception ex)
{
//GrabarLog
}
} //con.close(); con.Dispose();
return (lbeEmpleado);
}
}
}
Nota: Hay que referenciar a las librería "System.Configuration", la librería de entidades de negocio y de acceso a datos.
Crear una Aplicación Web de ASP.NET MVC4 en C#
Abrir el Visual Studio 2012 y seleccionar un nuevo proyecto de tipo: "Aplicación web de ASP.NET MVC4".
Escribir como nombre "Demo09" y "Aceptar", en el siguiente diálogo seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".
Antes de empezar a programar debemos referenciar las librerías anteriormente creadas, es decir, la librería de entidades del negocio, de acceso a datos y de reglas del negocio de Northwind.
Crear un Controlador para el Empleado
Clic derecho a la carpeta "Controllers" y seleccionar "Agregar" y luego "Controlador", llamarle al archivo "EmpleadoController.cs" y en opciones de plantillas dejarlo en plantilla vacia (Vaciar Controlador MVC). Luego escribir el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.ReglasNegocio;
namespace Demo09.Controllers
{
public class EmpleadoController : Controller
{
List<beEmpleado> lbePagina;
List<beEmpleado> lbeEmpleado;
int indicePaginaActual;
int indiceUltimaPagina;
int registrosPorPagina = 10;
private void mostrarPagina()
{
lbePagina = new List<beEmpleado>();
int inicio = indicePaginaActual * registrosPorPagina;
int fin = inicio + registrosPorPagina;
for (int i = inicio; i < fin; i++)
{
if (i==lbeEmpleado.Count) break;
lbePagina.Add(lbeEmpleado[i]);
}
}
public ActionResult Lista()
{
brEmpleado obrEmpleado = new brEmpleado();
lbeEmpleado = obrEmpleado.listar();
Session["Empleados"] = lbeEmpleado;
indiceUltimaPagina = (lbeEmpleado.Count / registrosPorPagina);
if (lbeEmpleado.Count % registrosPorPagina == 0) indiceUltimaPagina--;
ViewBag.IndiceUltimaPagina = indiceUltimaPagina;
mostrarPagina();
return View(lbePagina);
}
public PartialViewResult Ordenar(string campo)
{
ViewBag.Campo = campo;
lbeEmpleado = (List<beEmpleado>)Session["Empleados"];
int n = 0;
string simbolo = "▲";
if (TempData[campo] != null)
{
if (TempData[campo].Equals(0))
{
n = 1;
simbolo = "▼";
}
else simbolo = "▲";
}
TempData[campo] = n;
ViewBag.Simbolo = simbolo;
if (n == 0) lbeEmpleado = lbeEmpleado.OrderBy
(x => x.GetType().GetProperty(campo).GetValue(x, null)).ToList();
else lbeEmpleado = lbeEmpleado.OrderByDescending
(x => x.GetType().GetProperty(campo).GetValue(x, null)).ToList();
Session["Empleados"] = lbeEmpleado;
if (TempData["indicePaginaActual"] != null)
{
indicePaginaActual = (int)TempData["indicePaginaActual"];
TempData["indicePaginaActual"] = indicePaginaActual;
}
mostrarPagina();
return PartialView("Tabla", lbePagina);
}
public PartialViewResult Paginar(int pagina)
{
lbeEmpleado = (List<beEmpleado>)Session["Empleados"];
indicePaginaActual = pagina;
TempData["indicePaginaActual"] = indicePaginaActual;
mostrarPagina();
return PartialView("Tabla", lbePagina);
}
}
}
Nota: Inicialmente se llamará al método de acción "Lista" y luego los Ajax.ActionLink de ordenar llamarán a la acción "Ordenar" que devolverá una vista parcial llamada "Tabla" con los datos ordenados ascendente o descendente de acuerdo al valor del TempData de cada campo.
Si se da clic a los Ajax.ActionLink de paginación se llamará a la acción "Paginar" que configura el "indicePaginaActual" y muestra la vista parcial "Tabla" paginada.
Crear una Hoja de Estilos para la Vista Principal y la Vista Parcial
Primero crear una carpeta llamada "Content", luego clic derecho "Agregar" y luego "Hoja de estilos" y como nombre llamarle "ACME.css" y escribir el siguiente código:
body {
background-color:gray;
}
.Titulo {
background-color:black;
color:white;
font-size:larger;
}
.Subtitulo {
background-color:white;
color:black;
font-size:large;
}
.AnchoTotal {
width:100%;
}
.Centrado {
text-align:center;
}
.FilaCabecera {
background-color:lightgray;
color:black;
}
.FilaDatos {
background-color:white;
color:black;
}
Crear el archivo JavaScript con el código cliente para la Vista Principal
Antes que nada crear una carpeta llamada "Scripts" y arrastrar del explorador de Windows los archivos de jQuery: "jquery-1.8.2.min.js" y "jquery.unobtrusive-ajax.min.js", luego agregar un archivo de JavaScript llamado "Rutinas.js" y escribir el siguiente código:
function mostrarSimbolo() {
var campo = document.getElementById("hdfCampo").value;
var simbolo = document.getElementById("hdfSimbolo").value;
var span = document.getElementById("spn" + campo);
span.innerHTML = simbolo;
}
Nota: Los dos campos ocultos serán creados en la vista parcial y se usan para actualizar el símbolo de ordenación en la vista principal.
Crear la Vista Principal
Ir al controlador "Empleado" y ubicarse sobre el método "Lista" (acción), clic derecho y seleccionar "Agregar vista", desmarcar todas las casillas (checkboxs) y agregar la vista llamada "Lista", luego escribir el siguiente código:
@using Northwind.Librerias.EntidadesNegocio
@model List<beEmpleado>
@{
Layout = null;
AjaxOptions configura = new AjaxOptions{ HttpMethod="get", InsertionMode=InsertionMode.Replace, UpdateTargetId="tbEmpleado", OnComplete="mostrarSimbolo"};
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Lista</title>
<link href="~/Content/ACME.css" rel="stylesheet" />
</head>
<body>
<div>
<table class="AnchoTotal">
<tr class="Titulo">
<td>Demo 09: Grilla Paginada y Ordenada Asíncrona con
Ajax ActionLink y Vista Parcial</td>
</tr>
<tr class="Subtitulo">
<td>Consulta de Empleados</td>
</tr>
<tr>
<td>
<table class="AnchoTotal">
<thead>
<tr class="FilaCabecera">
<td style="width:70px">
@Ajax.ActionLink("Código","Ordenar",
new {campo="IdEmpleado"},configura)
@Html.Raw(" ")<span id="spnIdEmpleado"></span>
</td>
<td style="width:200px">
@Ajax.ActionLink("Apellido","Ordenar",
new {campo="Apellido"},configura)
@Html.Raw(" ")<span id="spnApellido"></span>
</td>
<td style="width:200px">
@Ajax.ActionLink("Nombre","Ordenar",
new {campo="Nombre"},configura)
@Html.Raw(" ")<span id="spnNombre"></span>
</td>
<td style="width:100px">
@Ajax.ActionLink("Fecha Nac","Ordenar",
new {campo="FechaNacimiento"},configura)
@Html.Raw(" ")<span id="spnFechaNacimiento"></span>
</td>
</tr>
</thead>
<tbody id="tbEmpleado">
@Html.Partial("Tabla",Model)
</tbody>
<tfoot>
<tr class="FilaCabecera">
<td colspan="4" class="Centrado">
@for (int i = 0; i <= ViewBag.IndiceUltimaPagina; i++)
{
@Ajax.ActionLink((i + 1).ToString(), "Paginar",
new { pagina=i}, configura)
@Html.Raw(" ")
}
</td>
</tr>
</tfoot>
</table>
</td>
</tr>
</table>
</div>
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script src="~/Scripts/Rutinas.js"></script>
</body>
</html>
Crear la Vista Parcial
Ir al controlador "Empleado" y ubicarse sobre el método "Lista" (acción), clic derecho y seleccionar "Agregar vista", seleccionar la casilla (check) "Crear como vista parcial" y agregar la vista llamada "Tabla", luego escribir el siguiente código:
@using Northwind.Librerias.EntidadesNegocio
@model List<beEmpleado>
@foreach (beEmpleado obeEmpleado in Model)
{
<tr class="FilaDatos">
<td>@obeEmpleado.IdEmpleado</td>
<td>@obeEmpleado.Apellido</td>
<td>@obeEmpleado.Nombre</td>
<td>@obeEmpleado.FechaNacimiento.ToShortDateString()</td>
</tr>
}
<input id="hdfCampo" type="hidden" value="@ViewBag.Campo" />
<input id="hdfSimbolo" type="hidden" value="@ViewBag.Simbolo" />
Nota: Es necesario que los dos campos ocultos se encuentren dentro de la vista parcial para que se actualicen con el nombre del campo y el símbolo que se va a mostrar al hacer la ordenación asíncrona.
Modificar el archivo Web.Config para incluir la cadena de conexión
Ir al archivo Web.config ubicado en la raíz del proyecto e incluir lo siguiente:
<connectionStrings>
<add name="conNW" providerName="SQLServer" connectionString=
"uid=UsuarioNW;pwd=123456;server=DSOFT\Sqlexpress;database=Northwind"/>
</connectionStrings>
Nota: Cambiar el nombre del servidor, el usuario y la clave de acuerdo a su configuración.
Configurar la Acción de Inicio
Para probar la aplicación web debemos configurar el inicio para lo cual nos vamos a la carpeta "App_Start" y abrimos el archivo "RouteConfig.cs" cambiando el nombre del controlador y la acción tal como se muestra en el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace Demo09
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Empleado", action = "Lista", id = UrlParameter.Optional }
);
}
}
}
Ejecutar y Probar la Aplicación Web
Finalmente, grabar y pulsar F5 para ejecutar la aplicación, mostrándose el resultado similar a la siguiente figura:
Probar la ordenación ascendente y descendente por cada columna y se mostrará similar a la siguiente figura:
Finalmente, navegar por cada página y se verá los datos similar a la siguiente figura:
Comentario Final
En este post, hemos aprendido como paginar y ordenar en forma asíncrona usando los controles Helpers Ajax.ActionLink de ASP.NET MVC para mostrar los datos de los empleados.
Como siempre en este Blog no hemos necesitado de ningún control de terceros para realizar estas operaciones, sino que lo hemos hecho con los controles y librerías que vienen con el Framework de ASP.NET MVC.
Descarga del código
Video del Demo
Mañana publicaré otro Demo interesante de como hacer lo mismo pero totalmente desconectado, es decir sin ir al servidor web ni al servidor de datos.
Si les gusto compartanlo y denle like o +.
Etiquetas:
Ajax ActionLink,
Asíncrono,
ASP.NET,
C#,
Demos,
Empleados,
Helpers,
Javascript,
jQuery,
Lduenas,
MVC,
Ordenar,
Paginar,
Razor,
TempData,
Video,
ViewBag,
ViewData,
Vista Parcial,
YouTube
Videos - Curso de ASP.NET MVC Domingos (Parte 3)
Videos del Curso de ASP.NET MVC Domingos (Parte 3)
Comparto la tercera parte del Curso de ASP.NET MVC realizado los Domingos.
Comparto la tercera parte del Curso de ASP.NET MVC realizado los Domingos.
Curso de MVC Domingos - Demo 11 - Consulta Asíncrona en el Servidor con jQuery Ajax y JSON
En este video se muestra como realizar una consulta asíncrona de productos por categoría usando jQuery Ajax y devolviendo una lista de objetos como JSON para escribir el HTML en el cliente por Javascript.
Curso de MVC Domingos - Demo 12 - Consulta Asíncrona en el Servidor con XmlHttpRequest y Strings
En este video aprenderemos como realizar una consulta asíncrona de productos por categoría usando XmlHttpRequest (lo que usa internamente jQuery y Ajax) y devolviendo una cadena (String) para reducir el ancho de banda ya que es la octava parte de una vista parcial y la tercera parte de un JSON.
Curso de MVC Domingos - Demo 13 - Consulta Desconectada en el Cliente con jQuery Ajax y JSON
Este video muestra como realizar una consulta de productos por categoría totalmente desconectada del servidor web y de base de datos, recibiendo la primera vez todos los datos como JSON usando jQuery Ajax y filtrándolos en el cliente por JavaScript.
Curso de MVC Domingos - Demo 14 - Ordenación Desconectada en el Cliente con jQuery Ajax y JSON
En este video se muestra como ordenar los productos en el lado del cliente, totalmente desconectado del servidor web y de datos, para lo cual inicialmente hacemos una llamada asíncrona con jQuery Ajax y devolvemos un JSON con los productos los cuales se ordenan usando una función genérica de JavaScript.
jueves, 12 de marzo de 2015
Videos - Curso de ASP.NET MVC Domingos (Parte 1)
Videos del Curso de ASP.NET MVC Domingos (Parte 1)
Comparto la primera parte del Curso de ASP.NET MVC realizado los Domingos.
Curso de MVC Domingos - Demo 01 - Acciones en un Controlador
Este video enseña como crear una simple aplicación web en ASP.NET MVC que tenga solo un controlador con varias acciones que devuelvan directamente datos de tipo cadena y fecha hora.
También se ve como configurar la acción y el controlador que inicia.
Curso de MVC Domingos - Demo 02 - Vistas y Navegación entre Acciones
En este video se muestra como crear vistas a partir de acciones y también como se navega entre vistas usando los Html Helpers ActionLinks.
Curso de MVC Domingos - Demo 03 - Formulario MVC y Controles Html Helpers
Este video muestra como enviar datos al servidor usando un formulario MVC y controles HTML Helpers para registrar los datos de un empleado.
Además muestra como cargar combos desde un archivo XML usando XmlTextReader y desde un archivo de Texto usando File.ReadAllLines.
Curso de MVC Domingos - Demo 04 (Parte 1) - Ordenar, Filtrar, Exportar a Texto y Excel
Este video muestra la primera parte de una aplicación web en ASP.NET MVC que lista los productos y permite ordenarlos por cualquier columna en forma ascendente y descendente.
Además permite filtrar los productos usando controles en las cabeceras, tanto textos como combos y muestra los datos encontrados de color rojo y en negrita usando un estilo.
Por último también permite exportar los datos buscados a un archivo de Texto y a Excel usando OLEDB y un archivo schema.ini para resolver los problemas de formato de columnas.
Curso de MVC Domingos - Demo 04 (Parte 2) - Ordenar, Filtrar, Exportar a Texto y Excel
Este video muestra la segunda parte de una aplicación web en ASP.NET MVC que lista los productos y permite ordenarlos por cualquier columna en forma ascendente y descendente.
Además permite filtrar los productos usando controles en las cabeceras, tanto textos como combos y muestra los datos encontrados de color rojo y en negrita usando un estilo.
Por último también permite exportar los datos buscados a un archivo de Texto y a Excel usando OLEDB y un archivo schema.ini para resolver los problemas de formato de columnas.
Curso de MVC Domingos - Demo 04 (Parte 3) - Ordenar, Filtrar, Exportar a Texto y Excel
Este video muestra la tercera parte de una aplicación web en ASP.NET MVC que lista los productos y permite ordenarlos por cualquier columna en forma ascendente y descendente.
Además permite filtrar los productos usando controles en las cabeceras, tanto textos como combos y muestra los datos encontrados de color rojo y en negrita usando un estilo.
Por último también permite exportar los datos buscados a un archivo de Texto y a Excel usando OLEDB y un archivo schema.ini para resolver los problemas de formato de columnas.
Comparto la primera parte del Curso de ASP.NET MVC realizado los Domingos.
Curso de MVC Domingos - Demo 01 - Acciones en un Controlador
Este video enseña como crear una simple aplicación web en ASP.NET MVC que tenga solo un controlador con varias acciones que devuelvan directamente datos de tipo cadena y fecha hora.
También se ve como configurar la acción y el controlador que inicia.
Curso de MVC Domingos - Demo 02 - Vistas y Navegación entre Acciones
En este video se muestra como crear vistas a partir de acciones y también como se navega entre vistas usando los Html Helpers ActionLinks.
Curso de MVC Domingos - Demo 03 - Formulario MVC y Controles Html Helpers
Este video muestra como enviar datos al servidor usando un formulario MVC y controles HTML Helpers para registrar los datos de un empleado.
Además muestra como cargar combos desde un archivo XML usando XmlTextReader y desde un archivo de Texto usando File.ReadAllLines.
Curso de MVC Domingos - Demo 04 (Parte 1) - Ordenar, Filtrar, Exportar a Texto y Excel
Este video muestra la primera parte de una aplicación web en ASP.NET MVC que lista los productos y permite ordenarlos por cualquier columna en forma ascendente y descendente.
Además permite filtrar los productos usando controles en las cabeceras, tanto textos como combos y muestra los datos encontrados de color rojo y en negrita usando un estilo.
Por último también permite exportar los datos buscados a un archivo de Texto y a Excel usando OLEDB y un archivo schema.ini para resolver los problemas de formato de columnas.
Curso de MVC Domingos - Demo 04 (Parte 2) - Ordenar, Filtrar, Exportar a Texto y Excel
Este video muestra la segunda parte de una aplicación web en ASP.NET MVC que lista los productos y permite ordenarlos por cualquier columna en forma ascendente y descendente.
Además permite filtrar los productos usando controles en las cabeceras, tanto textos como combos y muestra los datos encontrados de color rojo y en negrita usando un estilo.
Por último también permite exportar los datos buscados a un archivo de Texto y a Excel usando OLEDB y un archivo schema.ini para resolver los problemas de formato de columnas.
Curso de MVC Domingos - Demo 04 (Parte 3) - Ordenar, Filtrar, Exportar a Texto y Excel
Este video muestra la tercera parte de una aplicación web en ASP.NET MVC que lista los productos y permite ordenarlos por cualquier columna en forma ascendente y descendente.
Además permite filtrar los productos usando controles en las cabeceras, tanto textos como combos y muestra los datos encontrados de color rojo y en negrita usando un estilo.
Por último también permite exportar los datos buscados a un archivo de Texto y a Excel usando OLEDB y un archivo schema.ini para resolver los problemas de formato de columnas.
Etiquetas:
Ajax ActionLink,
Ajax Form,
Asíncrono,
ASP.NET,
C#,
Combos,
Curso MVC,
Demos,
Domingos,
Grilla,
Javascript,
jQuery,
JSON,
Lduenas,
MVC,
Razor,
Session,
Videos,
Vista Parcial,
YouTube
Suscribirse a:
Entradas (Atom)














