El Libro del Día: 2016-12-28
Titulo: Visual Studio 2015 Cookbook (2nd Edition)
Autor: Jeff Martin
Editorial: Packt
Nro Paginas: 368
Capítulos:
Chapter 1: Exploring Visual Studio 2015
Chapter 2: Getting Started with Universal Windows Platform Apps
Chapter 3: Web Development
Chapter 4: .NET Framework Development
Chapter 5: Debugging Your .NET Application
Chapter 6: Asynchrony in .NET
Chapter 7: Unwrapping C++ Development
Chapter 8: Working with Team Foundation Server 2015
Chapter 9: Languages
Chapter 10: Final Polish
Descarga:
Visual_Studio_2015_Cookbook
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 SPA. Mostrar todas las entradas
Mostrando las entradas con la etiqueta SPA. Mostrar todas las entradas
miércoles, 28 de diciembre de 2016
El Libro del Día: Visual Studio 2015 Cookbook
Etiquetas:
.NET Framework,
Apps,
Asynchronous,
C++,
Cookbook,
Debugging,
Jeff Martin,
Languages,
Libros,
Packt,
Python,
SPA,
TFS,
TPL,
TypeScript,
UWP,
Visual Studio 2015,
Web Development,
Windows 10,
XAML
martes, 5 de julio de 2016
El Libro del Día: RESTful Web Clients
El Libro del Día: 2016-07-05
Titulo: RESTful Web Clients
Autor: Mike Amundsen
Editorial: O'Reilly
Nro Paginas: 169
Capítulos:
1. Our HTML Roots and Simple Web APIs
2. JSON Clients
3. The Representor Pattern
4. Versioning and the Web
5. Collection+JSON Clients
Descarga:
RESTful_Web_Clients
Titulo: RESTful Web Clients
Autor: Mike Amundsen
Editorial: O'Reilly
Nro Paginas: 169
Capítulos:
1. Our HTML Roots and Simple Web APIs
2. JSON Clients
3. The Representor Pattern
4. Versioning and the Web
5. Collection+JSON Clients
Descarga:
RESTful_Web_Clients
Etiquetas:
Clients,
Collection,
HTML,
HTTP,
JSON,
Libros,
Mike Amundsen,
O'Reilly,
Representor Pattern,
REST,
RESTful,
Roots,
SPA,
TCP/IP,
TPS,
Versioning,
Web,
Web APIs,
Web Clients,
XML
viernes, 8 de abril de 2016
El Libro del Día: Sails.js Essentials
El Libro del Día: 2016-04-08
Titulo: Sails.js Essentials
Autor: Shaikh Shahid
Editorial: Packt
Nro Paginas: 108
Capítulos:
Chapter 1: Revisiting Node.js Concepts
Chapter 2: Developing Node.js Web Server
Chapter 3: Introduction to Sails.js and MVC Concepts
Chapter 4: Developing REST API Using Sails.js
Chapter 5: Build a Chat System Using Sails.js
Chapter 6: Building a Real-Time News Feed App Using Sails.js
Chapter 7: Creating a TODO Single-Page Application
Chapter 8: Sails.js Production Checklist
Descarga:
Sails.js_Essentials
Titulo: Sails.js Essentials
Autor: Shaikh Shahid
Editorial: Packt
Nro Paginas: 108
Capítulos:
Chapter 1: Revisiting Node.js Concepts
Chapter 2: Developing Node.js Web Server
Chapter 3: Introduction to Sails.js and MVC Concepts
Chapter 4: Developing REST API Using Sails.js
Chapter 5: Build a Chat System Using Sails.js
Chapter 6: Building a Real-Time News Feed App Using Sails.js
Chapter 7: Creating a TODO Single-Page Application
Chapter 8: Sails.js Production Checklist
Descarga:
Sails.js_Essentials
Etiquetas:
Chat System,
Checklist,
Concepts,
Developing,
Essentials,
Framework,
Javascript,
Libros,
MVC,
Node.js,
Packt,
Production,
Real-time,
REST API,
Sails.js,
Shaikh Shahid,
SPA,
TODO,
Tutorial,
Web Server
lunes, 22 de febrero de 2016
El Libro del Día: SPA Design and Architecture
El Libro del Día: 2016-02-22
Titulo: SPA Design and Architecture
Autor: Emmit A. Scott, Jr.
Editorial: Manning
Nro Paginas: 314
Capítulos:
Part 1: The Basics
1. What is a Single Page Application?
2. The role of MV* Frameworks
3. Modular JavaScript
Part 2: Core Concepts
4. Navigating the single page
5. View composition and layout
6. Inter-module interaction
7. Communicating with the server
8. Unit testing
9. Client side task automation
Appendix A: Employee directory example walk through
Appendix B: Review of the XMLHttpRequest API
Appendix C: Chapter 7 server side setup and summary
Appendix D: Installing Node.js and Gulp.js
Descarga:
SPA_Design_and_Architecture
Titulo: SPA Design and Architecture
Autor: Emmit A. Scott, Jr.
Editorial: Manning
Nro Paginas: 314
Capítulos:
Part 1: The Basics
1. What is a Single Page Application?
2. The role of MV* Frameworks
3. Modular JavaScript
Part 2: Core Concepts
4. Navigating the single page
5. View composition and layout
6. Inter-module interaction
7. Communicating with the server
8. Unit testing
9. Client side task automation
Appendix A: Employee directory example walk through
Appendix B: Review of the XMLHttpRequest API
Appendix C: Chapter 7 server side setup and summary
Appendix D: Installing Node.js and Gulp.js
Descarga:
SPA_Design_and_Architecture
Etiquetas:
Application,
Architecture,
Automation,
Design,
Emmit A. Scott,
Frameworks,
Gulp.js,
Interaction,
Javascript,
Layout,
Libros,
Manning,
Navigating,
Node.js,
Server,
Single Page,
SPA,
Unit Testing,
View composition,
XHR
jueves, 28 de enero de 2016
El Libro del Día: Getting MEAN with Mongo, Express, Angular, and Node
El Libro del Día: 2016-01-28
Titulo: Getting MEAN with Mongo, Express, Angular, and Node
Autor: Simon Holmes
Editorial: Manning
Nro Paginas: 442
Capítulos:
Part 1: Setting the BaseLine
1. Introducing full stack development
2. Designing a MEAN stack architecture
Part 2: Building a Node Web Application
3. Creating and setting up a MEAN project
4. Building a static site with Node and Express
5. Building a data model with MongoDB and Mongoose
6. Writing a REST API: Exposing the MongoDB database to the application
7. Consuming a REST API: Using an API from inside Express
Part 3: Adding a Dynamic Front End with Angular
8. Adding Angular components to an Express application
9. Building a single page application with Angular: Foundations
10. Building an SPA with Angular: The next level
Part 4: Managing authentication and user sessions
11. Authenticating users, managing sessions, and securing APIs
Descarga:
Getting_MEAN_with_Mongo,_Express,_Angular,_and_Node
Titulo: Getting MEAN with Mongo, Express, Angular, and Node
Autor: Simon Holmes
Editorial: Manning
Nro Paginas: 442
Capítulos:
Part 1: Setting the BaseLine
1. Introducing full stack development
2. Designing a MEAN stack architecture
Part 2: Building a Node Web Application
3. Creating and setting up a MEAN project
4. Building a static site with Node and Express
5. Building a data model with MongoDB and Mongoose
6. Writing a REST API: Exposing the MongoDB database to the application
7. Consuming a REST API: Using an API from inside Express
Part 3: Adding a Dynamic Front End with Angular
8. Adding Angular components to an Express application
9. Building a single page application with Angular: Foundations
10. Building an SPA with Angular: The next level
Part 4: Managing authentication and user sessions
11. Authenticating users, managing sessions, and securing APIs
Descarga:
Getting_MEAN_with_Mongo,_Express,_Angular,_and_Node
Etiquetas:
Angular,
Architecture,
Authentication,
Data Model,
Express,
Express App,
Foundations,
Libros,
Manning,
MEAN,
Mongo,
Mongoose,
Node,
Project,
REST API,
Sessions,
Simon Holmes,
SPA,
static site,
Web App
martes, 26 de enero de 2016
El Libro del Día: Web Development with MongoDB and NodeJS
El Libro del Día: 2016-01-26
Titulo: Web Development with MongoDB and NodeJS (Second Edition)
Autor: Mithun Satheesh, Bruno Joseph D'mello, Jason Krol
Editorial: Packt
Nro Paginas: 301
Capítulos:
Chapter 1: Welcome to JavaScript in the Full Stack
Chapter 2: Getting Up and Running
Chapter 3: Node and MongoDB Basics
Chapter 4: Introducing Express
Chapter 5: Templating with Handlebars
Chapter 6: Controllers and View Models
Chapter 7: Persisting Data with MongoDB
Chapter 8: Creating a RESTful API
Chapter 9: Testing Your Code
Chapter 10: Deploying with Cloud-Based Services
Chapter 11: Single-Page Applications with Popular Frontend Frameworks
Chapter 12: Popular Node.js Web Frameworks
Descarga:
Web_Development_with_MongoDB_and_NodeJS
Titulo: Web Development with MongoDB and NodeJS (Second Edition)
Autor: Mithun Satheesh, Bruno Joseph D'mello, Jason Krol
Editorial: Packt
Nro Paginas: 301
Capítulos:
Chapter 1: Welcome to JavaScript in the Full Stack
Chapter 2: Getting Up and Running
Chapter 3: Node and MongoDB Basics
Chapter 4: Introducing Express
Chapter 5: Templating with Handlebars
Chapter 6: Controllers and View Models
Chapter 7: Persisting Data with MongoDB
Chapter 8: Creating a RESTful API
Chapter 9: Testing Your Code
Chapter 10: Deploying with Cloud-Based Services
Chapter 11: Single-Page Applications with Popular Frontend Frameworks
Chapter 12: Popular Node.js Web Frameworks
Descarga:
Web_Development_with_MongoDB_and_NodeJS
Etiquetas:
APIs,
Bruno Joseph D'mello,
Controllers,
Deploying,
Express,
Frameworks,
Handlebars,
Jason Krol,
Javascript,
Libros,
Mithun Satheesh,
MongoDB,
NodeJS,
Packt,
RESTful,
Services,
SPA,
Testing,
View Models,
Web Development
martes, 22 de diciembre de 2015
El Demo del Día: Aplicación de Simple Página (SPA) en ASP.NET MVC
Aplicación de Simple Página (SPA) en ASP.NET MVC
Después de mucho tiempo vamos a presentar un nuevo Demo, esta vez comparando una Aplicación de Múltiples Páginas (MPA) con una Aplicación de Simple Página (SPA), pero sin usar ningún Framework SPA como AngularJS, Knockout, Ember, Meteor, Kendo UI, etc.
Introducción a una SPA
El modelo por defecto en ASP.NET sea WebForms o MVC es MPA, quiere decir que nuestro sitio web se compone de varias páginas las cuales se solicitan desde el cliente una a una y cada una descarga sus archivos necesarios: HTML, JavaScript, CSS, Imágenes, Fuentes, etc.
En cambio si nuestro sitio solo tuviera una simple página solo se cargaría una sola vez todos los archivos.
Ventajas de una SPA
La gran ventaja de una Aplicación de Simple Página (SPA) es que evita conectarse varias veces al servidor para solicitar cada página, es decir, favorece el trabajo desconectado, ya que al haber una sola página se pueda cargar todos los datos necesarios al inicio, así como los JavaScripts y las hojas de estilo.
Trabajar con una sola página ayuda a la Performance, ya que evita conexiones innecesarias al servidor web.
Usos de una SPA
Generalmente, los sitios web móviles usan este modelo, ya que solo se carga una página y se va presentando secciones (llamadas cartas o barajas) de ésta, muchos de los Frameworks para Aplicaciones Web Móviles trabajan de esta forma, por ejemplo jQuery Mobile, Bootstrap, etc.
Pero si nuestra Aplicación Web no tiene demasiadas páginas ni datos que cargar, también podemos usar este modelo, ahorrando conexiones al servidor, es decir, trabajando en forma desconectada.
Características de una SPA
Existen muchas características de una SPA:
- La principal es que la aplicación solo tenga una página.
- Aunque no es exclusividad de una SPA, actualmente el Diseño Web debe ser Adaptativo (Responsive Web Design).
- Otra característica importante (que también no es exclusividad de SPA) es que debe hacer llamadas Asíncronas JavaScript HTTP: AJAX (Xml), AJAJ (JSON) o AJAS (Strings).
Ejemplo de Comparación entre MPA y SPA en ASP.NET MVC
A continuación vamos a presentar un ejemplo donde comparamos una Aplicación sobre Pedidos que tiene los 2 modelos:
- MPA: Compuesto por un Controlador llamado MPA que tiene 4 métodos de acción y 4 vistas, llamadas Login, Categoria, Producto y Pedido. La navegación entre cada una implica ir al servidor y esperar su respuesta, para lo cual a propósito se ha puesto un tiempo de espera. Este modelo usa 4 archivos de JavaScript, uno para cada página.
- SPA: Compuesto por un Controlador llamado SPA que tiene solo un método de acción y una vista llamada Pedido. Por otra parte solo hay un archivo de JavaScript llamado Todo.js que realiza la navegación entre páginas (divs) y que no viaja al servidor sino solo se hace en el cliente.
Crear una Aplicación ASP.NET MVC 4 en C#
- Abrir Visual Studio 2012 y crear un proyecto de tipo "Aplicación web de ASP.NET MVC4" y asignarle como nombre: "SinglePageApplication".
- Seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".
Crear el Controlador MPA
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "MPAController" y luego escribir el siguiente código:
using System;
using System.Web;
using System.Web.Mvc;
namespace SinglePageApplication.Controllers
{
public class MPAController : Controller
{
public ActionResult Login()
{
return View();
}
public ActionResult Categoria()
{
//Simular que esta conectandose a la BD para traer las Categorias
System.Threading.Thread.Sleep(2000);
return View();
}
public ActionResult Producto()
{
//Simular que esta conectandose a la BD para traer los Productos x Categoria
System.Threading.Thread.Sleep(4000);
return View();
}
public ActionResult Pedido()
{
//Simular que esta leyendo del TempData los Pedidos
System.Threading.Thread.Sleep(1000);
return View();
}
}
}
Crear una Hoja de Estilo para todas las vistas
- Crear una carpeta para los archivos CSS llamado: "Estilos".
- Crear una hoja de estilo llamada "ACME.css" dentro de la carpeta Estilos y escribir el siguiente código:
body {
background-color:aqua;
width:100%;
}
.Titulo {
background-color:blue;
color:white;
font-family:Arial;
font-size:xx-large;
text-align:center;
}
.Subtitulo {
background-color:white;
color:blue;
font-family:Arial;
font-size:x-large;
text-align:center;
}
table {
width:100%;
}
.FilaCabecera {
background-color:lightgray;
color:black;
}
.FilaDatos {
background-color:white;
color:black;
}
.Pagina {
display:none;
}
- Ir al controlador MPA, clic derecho sobre el nombre del método "Login" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Login</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divLogin">
<div id="divCabeceraLogin">
<div id="divTituloLogin" class="Titulo">
<span id="spnTitulo">Aplicación de Múltiples Paginas (MPA)</span>
</div>
<div id="divSubtituloLogin" class="Subtitulo">
<span id="spnSubtituloLogin">Login del Sistema</span>
</div>
</div>
<div id="divCuerpoLogin">
<div id="divEtiquetaUsuario">
<span id="spnUsuario">Usuario: </span>
</div>
<div id="divTextoUsuario">
<input id="txtUsuario" type="text" />
</div>
<div id="divEtiquetaClave">
<span id="spnClave">Clave: </span>
</div>
<div id="divTextoClave">
<input id="txtClave" type="password" />
</div>
<div id="divBotonesLogin">
<input id="btnAceptar" type="button" value="Aceptar" />
</div>
</div>
<div id="divPieLogin">
<div id="divUbicacion" class="Subtitulo">
<span id="spnUbicacion">Lima - Perú</span>
</div>
</div>
</div>
<script src="~/Scripts/Login.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Categoria" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
- Crear una carpeta para los archivos js llamado: "Scripts"
- Crear una archivo de JavaScript llamado "Login.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
var btnAceptar = document.getElementById("btnAceptar");
btnAceptar.onclick = function () {
var txtUsuario = document.getElementById("txtUsuario");
if (txtUsuario.value == "") {
alert("Ingresa el Usuario");
txtUsuario.focus();
return false;
}
var txtClave = document.getElementById("txtClave");
if (txtClave.value == "") {
alert("Ingresa la Clave");
txtClave.focus();
return false;
}
if (txtUsuario.value == "Luis" && txtClave.value == "123") {
window.location.href = "MPA/Categoria";
}
else {
alert("Login invalido");
}
}
}
- Crear una archivo de JavaScript llamado "Categoria.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Categorias");
}
- Crear una archivo de JavaScript llamado "Producto.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Productos");
}
- Crear una archivo de JavaScript llamado "Pedido.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Pedidos");
}
Configurar el Inicio del MPA
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
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 = "MPA", action = "Login", id = UrlParameter.Optional }
);
}
}
}
- Ir al controlador SPA, clic derecho sobre el nombre del método "Pedido" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
- Crear una archivo de JavaScript llamado "Todo.js" dentro de la carpeta Scripts y escribir el siguiente código:
Después de mucho tiempo vamos a presentar un nuevo Demo, esta vez comparando una Aplicación de Múltiples Páginas (MPA) con una Aplicación de Simple Página (SPA), pero sin usar ningún Framework SPA como AngularJS, Knockout, Ember, Meteor, Kendo UI, etc.
Introducción a una SPA
El modelo por defecto en ASP.NET sea WebForms o MVC es MPA, quiere decir que nuestro sitio web se compone de varias páginas las cuales se solicitan desde el cliente una a una y cada una descarga sus archivos necesarios: HTML, JavaScript, CSS, Imágenes, Fuentes, etc.
En cambio si nuestro sitio solo tuviera una simple página solo se cargaría una sola vez todos los archivos.
Ventajas de una SPA
La gran ventaja de una Aplicación de Simple Página (SPA) es que evita conectarse varias veces al servidor para solicitar cada página, es decir, favorece el trabajo desconectado, ya que al haber una sola página se pueda cargar todos los datos necesarios al inicio, así como los JavaScripts y las hojas de estilo.
Trabajar con una sola página ayuda a la Performance, ya que evita conexiones innecesarias al servidor web.
Usos de una SPA
Generalmente, los sitios web móviles usan este modelo, ya que solo se carga una página y se va presentando secciones (llamadas cartas o barajas) de ésta, muchos de los Frameworks para Aplicaciones Web Móviles trabajan de esta forma, por ejemplo jQuery Mobile, Bootstrap, etc.
Pero si nuestra Aplicación Web no tiene demasiadas páginas ni datos que cargar, también podemos usar este modelo, ahorrando conexiones al servidor, es decir, trabajando en forma desconectada.
Características de una SPA
Existen muchas características de una SPA:
- La principal es que la aplicación solo tenga una página.
- Aunque no es exclusividad de una SPA, actualmente el Diseño Web debe ser Adaptativo (Responsive Web Design).
- Otra característica importante (que también no es exclusividad de SPA) es que debe hacer llamadas Asíncronas JavaScript HTTP: AJAX (Xml), AJAJ (JSON) o AJAS (Strings).
Ejemplo de Comparación entre MPA y SPA en ASP.NET MVC
A continuación vamos a presentar un ejemplo donde comparamos una Aplicación sobre Pedidos que tiene los 2 modelos:
- MPA: Compuesto por un Controlador llamado MPA que tiene 4 métodos de acción y 4 vistas, llamadas Login, Categoria, Producto y Pedido. La navegación entre cada una implica ir al servidor y esperar su respuesta, para lo cual a propósito se ha puesto un tiempo de espera. Este modelo usa 4 archivos de JavaScript, uno para cada página.
- SPA: Compuesto por un Controlador llamado SPA que tiene solo un método de acción y una vista llamada Pedido. Por otra parte solo hay un archivo de JavaScript llamado Todo.js que realiza la navegación entre páginas (divs) y que no viaja al servidor sino solo se hace en el cliente.
Crear una Aplicación ASP.NET MVC 4 en C#
- Abrir Visual Studio 2012 y crear un proyecto de tipo "Aplicación web de ASP.NET MVC4" y asignarle como nombre: "SinglePageApplication".
- Seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".
Crear el Controlador MPA
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "MPAController" y luego escribir el siguiente código:
using System;
using System.Web;
using System.Web.Mvc;
namespace SinglePageApplication.Controllers
{
public class MPAController : Controller
{
public ActionResult Login()
{
return View();
}
public ActionResult Categoria()
{
//Simular que esta conectandose a la BD para traer las Categorias
System.Threading.Thread.Sleep(2000);
return View();
}
public ActionResult Producto()
{
//Simular que esta conectandose a la BD para traer los Productos x Categoria
System.Threading.Thread.Sleep(4000);
return View();
}
public ActionResult Pedido()
{
//Simular que esta leyendo del TempData los Pedidos
System.Threading.Thread.Sleep(1000);
return View();
}
}
}
Crear una Hoja de Estilo para todas las vistas
- Crear una carpeta para los archivos CSS llamado: "Estilos".
- Crear una hoja de estilo llamada "ACME.css" dentro de la carpeta Estilos y escribir el siguiente código:
body {
background-color:aqua;
width:100%;
}
.Titulo {
background-color:blue;
color:white;
font-family:Arial;
font-size:xx-large;
text-align:center;
}
.Subtitulo {
background-color:white;
color:blue;
font-family:Arial;
font-size:x-large;
text-align:center;
}
table {
width:100%;
}
.FilaCabecera {
background-color:lightgray;
color:black;
}
.FilaDatos {
background-color:white;
color:black;
}
.Pagina {
display:none;
}
Crear las Vistas para MPA
- Ir al controlador MPA, clic derecho sobre el nombre del método "Login" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Login</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divLogin">
<div id="divCabeceraLogin">
<div id="divTituloLogin" class="Titulo">
<span id="spnTitulo">Aplicación de Múltiples Paginas (MPA)</span>
</div>
<div id="divSubtituloLogin" class="Subtitulo">
<span id="spnSubtituloLogin">Login del Sistema</span>
</div>
</div>
<div id="divCuerpoLogin">
<div id="divEtiquetaUsuario">
<span id="spnUsuario">Usuario: </span>
</div>
<div id="divTextoUsuario">
<input id="txtUsuario" type="text" />
</div>
<div id="divEtiquetaClave">
<span id="spnClave">Clave: </span>
</div>
<div id="divTextoClave">
<input id="txtClave" type="password" />
</div>
<div id="divBotonesLogin">
<input id="btnAceptar" type="button" value="Aceptar" />
</div>
</div>
<div id="divPieLogin">
<div id="divUbicacion" class="Subtitulo">
<span id="spnUbicacion">Lima - Perú</span>
</div>
</div>
</div>
<script src="~/Scripts/Login.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Categoria" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Categoria</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divCategoria">
<div id="divCabeceraCategoria">
<div id="divSubtituloCategoria" class="Subtitulo">
<span id="spnSubtituloCategoria">Selecciona una Categoria</span>
</div>
</div>
<div id="divListaCategoria">
<span id="spnListaCategoria">Aqui se debe mostrar un lista de Categorias</span>
</div>
<div id="divPieCategoria">
<div id="divNavegarCategoria" class="Subtitulo">
<a id="aCatProd" href="~/MPA/Producto">Productos</a>
</div>
</div>
</div>
<script src="~/Scripts/Categoria.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Producto" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Producto</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divProducto">
<div id="divCabeceraProducto">
<div id="divSubtituloProducto" class="Subtitulo">
<span id="spnSubtituloProducto">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaProducto">
<span id="spnListaProducto">Aqui se debe mostrar un lista de Productos</span>
</div>
<div id="divPieProducto">
<div id="divNavegarProducto" class="Subtitulo">
<a id="aProdPed" href="~/MPA/Pedido">Pedidos</a>
<a id="aProdCat" href="~/MPA/Categoria">Regresar</a>
</div>
</div>
</div>
<script src="~/Scripts/Producto.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Pedido" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Pedido</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divPedido">
<div id="divCabeceraPedido">
<div id="divSubtituloPedido" class="Subtitulo">
<span id="spnSubtituloPedido">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaPedido">
<span id="spnListaPedido">Aqui se debe mostrar un lista de Pedidos</span>
</div>
<div id="divPiePedido">
<div id="divNavegarPedido" class="Subtitulo">
<a id="aPedCat" href="~/MPA/Categoria">Regresar</a>
</div>
</div>
</div>
<script src="~/Scripts/Pedido.js"></script>
</body>
</html>
Crear los JavaSripts para MPA
- Crear una carpeta para los archivos js llamado: "Scripts"
- Crear una archivo de JavaScript llamado "Login.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
var btnAceptar = document.getElementById("btnAceptar");
btnAceptar.onclick = function () {
var txtUsuario = document.getElementById("txtUsuario");
if (txtUsuario.value == "") {
alert("Ingresa el Usuario");
txtUsuario.focus();
return false;
}
var txtClave = document.getElementById("txtClave");
if (txtClave.value == "") {
alert("Ingresa la Clave");
txtClave.focus();
return false;
}
if (txtUsuario.value == "Luis" && txtClave.value == "123") {
window.location.href = "MPA/Categoria";
}
else {
alert("Login invalido");
}
}
}
- Crear una archivo de JavaScript llamado "Categoria.js" dentro de la carpeta Scripts y escribir el siguiente código:
alert("Cargando Categorias");
}
- Crear una archivo de JavaScript llamado "Producto.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Productos");
}
- Crear una archivo de JavaScript llamado "Pedido.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Pedidos");
}
Configurar el Inicio del MPA
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
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 = "MPA", action = "Login", id = UrlParameter.Optional }
);
}
}
}
Probar y Ejecutar la Aplicación de Múltiples Páginas (MPA)
- Grabar y ejecutar la aplicación pulsando F5 y se mostrará una ventana similar a la siguiente figura:
- Ingresar como usuario "Luis" y como clave "123" y "Aceptar", observando que se demora en cargar la segunda página de Categoria, similar a la siguiente figura:
- Clic al enlace de Productos y después de esperar un momento se mostrará la página de Producto, similar a la siguiente figura:
- Clic al enlace de Pedidos y después de esperar un momento se mostrará la página de Pedido, similar a la siguiente figura:
- Si deseas en cualquier página puedes seleccionar el enlace "Regresar".
Nota: En todos los enlaces al dar clic se irá al servidor para cargar la página ya que el modelo es MPA.
Crear el Controlador SPA
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "SPAController" y luego escribir el siguiente código:
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "SPAController" y luego escribir el siguiente código:
using System;
using System.Web;
using System.Web.Mvc;
namespace SinglePageApplication.Controllers
{
public class SPAController : Controller
{
public ActionResult Pedido()
{
return View();
}
}
}
Crear la Vista para SPA
- Ir al controlador SPA, clic derecho sobre el nombre del método "Pedido" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Pedido</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divTodo">
<div id="divLogin" class="Pagina">
<div id="divCabeceraLogin">
<div id="divTituloLogin" class="Titulo">
<span id="spnTitulo">Aplicación de Simple Pagina (SPA)</span>
</div>
<div id="divSubtituloLogin" class="Subtitulo">
<span id="spnSubtituloLogin">Login del Sistema</span>
</div>
</div>
<div id="divCuerpoLogin">
<div id="divEtiquetaUsuario">
<span id="spnUsuario">Usuario: </span>
</div>
<div id="divTextoUsuario">
<input id="txtUsuario" type="text" />
</div>
<div id="divEtiquetaClave">
<span id="spnClave">Clave: </span>
</div>
<div id="divTextoClave">
<input id="txtClave" type="password" />
</div>
<div id="divBotonesLogin">
<input id="btnAceptar" type="button" value="Aceptar" />
</div>
</div>
<div id="divPieLogin">
<div id="divUbicacion" class="Subtitulo">
<span id="spnUbicacion">Lima - Perú</span>
</div>
</div>
</div>
<div id="divCategoria" class="Pagina">
<div id="divCabeceraCategoria">
<div id="divSubtituloCategoria" class="Subtitulo">
<span id="spnSubtituloCategoria">Selecciona una Categoria</span>
</div>
</div>
<div id="divListaCategoria">
<span id="spnListaCategoria">Aqui se debe mostrar un lista de Categorias</span>
</div>
<div id="divPieCategoria">
<div id="divNavegarCategoria" class="Subtitulo">
<a id="aCatProd" href="#" data-url="divProducto">Productos</a>
</div>
</div>
</div>
<div id="divProducto" class="Pagina">
<div id="divCabeceraProducto">
<div id="divSubtituloProducto" class="Subtitulo">
<span id="spnSubtituloProducto">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaProducto">
<span id="spnListaProducto">Aqui se debe mostrar un lista de Productos</span>
</div>
<div id="divPieProducto">
<div id="divNavegarProducto" class="Subtitulo">
<a id="aProdPed" href="#" data-url="divPedido">Pedidos</a>
<a id="aProdCat" href="#" data-url="divCategoria">Regresar</a>
</div>
</div>
</div>
<div id="divPedido" class="Pagina">
<div id="divCabeceraPedido">
<div id="divSubtituloPedido" class="Subtitulo">
<span id="spnSubtituloPedido">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaPedido">
<span id="spnListaPedido">Aqui se debe mostrar un lista de Pedidos</span>
</div>
<div id="divPiePedido">
<div id="divNavegarPedido" class="Subtitulo">
<a id="aPedCat" href="#" data-url="divCategoria">Regresar</a>
</div>
</div>
</div>
</div>
<script src="~/Scripts/Todo.js"></script>
</body>
</html>
Crear el JavaSript para SPA
- Crear una archivo de JavaScript llamado "Todo.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
//Mostrar la primera pagina
var divLogin = document.getElementById("divLogin");
if (divLogin) {
divLogin.style.display = "inline";
scriptLogin();
}
//Programar toda la navegación
var enlaces = document.getElementsByTagName("a");
if (enlaces != null && enlaces.length > 0) {
var n = enlaces.length;
var enlace;
var pagina;
var script;
for (var i = 0; i < n; i++) {
enlace = enlaces[i];
enlace.onclick = function () {
ocultarPaginas();
var id = this.getAttribute("data-url");
pagina = document.getElementById(id);
if (pagina != null) {
pagina.style.display = "inline";
script = id.replace("div", "script");
window[script]();
}
}
}
}
}
function ocultarPaginas() {
var paginas = document.getElementsByClassName("Pagina");
if (paginas != null && paginas.length > 0) {
var n = paginas.length;
var pagina;
for (var i = 0; i < n; i++) {
pagina = paginas[i];
pagina.style.display = "none";
}
}
}
function scriptLogin() {
var btnAceptar = document.getElementById("btnAceptar");
btnAceptar.onclick = function () {
var txtUsuario = document.getElementById("txtUsuario");
if (txtUsuario.value == "") {
alert("Ingresa el Usuario");
txtUsuario.focus();
return false;
}
var txtClave = document.getElementById("txtClave");
if (txtClave.value == "") {
alert("Ingresa la Clave");
txtClave.focus();
return false;
}
if (txtUsuario.value == "Luis" && txtClave.value == "123") {
var divCategoria = document.getElementById("divCategoria");
if (divCategoria) {
ocultarPaginas();
divCategoria.style.display = "inline";
scriptCategoria();
}
}
else {
alert("Login invalido");
}
}
}
function scriptCategoria() {
alert("Cargando Categorias");
}
function scriptProducto() {
alert("Cargando Productos");
}
function scriptPedido() {
alert("Cargando Pedidos");
}
Nota: En el evento load de la ventana se muestra solo el primer div (Login) y el resto esta oculto por el estilo de la clase Pagina. Además se obtiene todos los enlaces y se programa para que se navegue al div que especifique el atributo "data-url" ejecutando su script asociado que debe tener el prefijo script seguido del nombre usando: window[script]().
Configurar el Inicio del SPA
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
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 = "SPA", action = "Pedido", id = UrlParameter.Optional }
);
}
}
}
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
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 = "SPA", action = "Pedido", id = UrlParameter.Optional }
);
}
}
}
Probar y Ejecutar la Aplicación de Simple Página (SPA)
- Grabar y ejecutar la aplicación pulsando F5 y se mostrará una ventana similar a la siguiente figura:
- Ingresar como usuario "Luis" y como clave "123" y "Aceptar", observando que no se demora en cargar nada la segunda página de Categoria ya que es un div, similar a la siguiente figura:
- Clic al enlace de Productos e inmediatamente se mostrará la página de Producto ya que es un div, similar a la siguiente figura:
- Clic al enlace de Pedidos y e inmediatamente se mostrará la página de Pedido que también es un div, similar a la siguiente figura:
- Si deseas en cualquier página puedes seleccionar el enlace "Regresar"y navegará a la sección especificada.
Nota: En todos los enlaces al dar clic se ocultarán todos los divs y se mostrará uno solo ya que el modelo es SPA, es decir, no se va al servidor sino solo se muestra en el cliente.
Comentario Final
En este post un poco largo hemos querido mostrar como se puede crear sin ningún Framework de JavaScript una Aplicación de Simple Pagina (SPA) tan solo usando divs y un poco de JavaScript, lo cual es muy útil para trabajar en forma desconectada en aplicaciones pequeñas, por ejemplo, las aplicaciones web móviles.
Las personas que desean crear una SPA en MVC usando Frameworks, encontrarán muchos Blogs y Sitios Web, ya que para esto existe mucha información, tanto oficial como no oficial, por ejemplo les alcanzo un enlace del MSDN:
ASP.NET MVC 5: A .NET Developer Primer for SPA
Finalmente, como siempre hemos querido demostrar como hacerlo nosotros mismos sin necesidad de descargar nada, ni en el servidor ni en el cliente, ya que esto aumenta el tamaño de la aplicación perjudicando el ancho de banda, es decir, la performance.
Descarga del Código
SinglePageApplication
Comentario Final
En este post un poco largo hemos querido mostrar como se puede crear sin ningún Framework de JavaScript una Aplicación de Simple Pagina (SPA) tan solo usando divs y un poco de JavaScript, lo cual es muy útil para trabajar en forma desconectada en aplicaciones pequeñas, por ejemplo, las aplicaciones web móviles.
Las personas que desean crear una SPA en MVC usando Frameworks, encontrarán muchos Blogs y Sitios Web, ya que para esto existe mucha información, tanto oficial como no oficial, por ejemplo les alcanzo un enlace del MSDN:
ASP.NET MVC 5: A .NET Developer Primer for SPA
Finalmente, como siempre hemos querido demostrar como hacerlo nosotros mismos sin necesidad de descargar nada, ni en el servidor ni en el cliente, ya que esto aumenta el tamaño de la aplicación perjudicando el ancho de banda, es decir, la performance.
Descarga del Código
SinglePageApplication
martes, 2 de junio de 2015
El Libro del Día: Pro Single Page Application Development
El Libro del Día: 2015-06-02
Titulo: Pro Single Page Application Development
Autor: Gil Fink, Ido Flatow
Editorial: Apress
Nro Paginas: 307
Capítulos:
Part I: The Road to Single Page Application Development
Chapter 1: Introducing Single Page Applications
Chapter 2: JavaScript for SPAs
Chapter 3: Modular JavaScript Development
Chapter 4: SPA Concepts and Architecture
Part II: Building the Front End
Chapter 5: Getting Started with Backbone.js
Chapter 6: Creating a Single Page Application Step by Step
Part III: Building the Back End
Chapter 7: Creating a Back-End Service with ASP.NET Web API
Chapter 8: Implementing HTTP Concepts with ASP.NET Web API
Chapter 9: Communication Between Front and Back End
Part IV: Advanced SPA Topics
Chapter 10: JavaScript Unit Testing
Chapter 11: SPA Performance Tuning
Chapter 12: Search Engine Optimization for SPAs
Chapter 13: SPA Deployment
Descarga:
Pro_Single_Page_Application_Development
Titulo: Pro Single Page Application Development
Autor: Gil Fink, Ido Flatow
Editorial: Apress
Nro Paginas: 307
Capítulos:
Part I: The Road to Single Page Application Development
Chapter 1: Introducing Single Page Applications
Chapter 2: JavaScript for SPAs
Chapter 3: Modular JavaScript Development
Chapter 4: SPA Concepts and Architecture
Part II: Building the Front End
Chapter 5: Getting Started with Backbone.js
Chapter 6: Creating a Single Page Application Step by Step
Part III: Building the Back End
Chapter 7: Creating a Back-End Service with ASP.NET Web API
Chapter 8: Implementing HTTP Concepts with ASP.NET Web API
Chapter 9: Communication Between Front and Back End
Part IV: Advanced SPA Topics
Chapter 10: JavaScript Unit Testing
Chapter 11: SPA Performance Tuning
Chapter 12: Search Engine Optimization for SPAs
Chapter 13: SPA Deployment
Descarga:
Pro_Single_Page_Application_Development
Etiquetas:
Apress,
Architecture,
ASP.NET,
Back End,
Backbone.js,
Communication,
Deployment,
Development,
Front End,
Gil Fink,
HTTP,
Ido Flatow,
Javascript,
Libros,
Performance,
SEO,
SPA,
Tuning,
Unit Testing,
Web API
jueves, 6 de noviembre de 2014
El Libro del Día: Professional ASP.NET MVC 5
El Libro del Día: 2014-11-06
Titulo: Professional ASP.NET MVC 5
Autor: Jon Galloway, Brad Wilson, K. Scott Allen, David Matson
Editorial: Wrox
Nro Paginas: 620
Capítulos:
CHAPTER 1 Getting Started
CHAPTER 2 Controllers
CHAPTER 3 Views
CHAPTER 4 Models
CHAPTER 5 Forms and HTML Helpers
CHAPTER 6 Data Annotations and Validation
CHAPTER 7 Membership, Authorization, and Security
CHAPTER 8 Ajax
CHAPTER 9 Routing
CHAPTER 10 NuGet
CHAPTER 11 ASP.NET Web API
CHAPTER 12 Single Page Applications with AngularJS
CHAPTER 13 Dependency Injection
CHAPTER 14 Unit Testing
CHAPTER 15 Extending MVC
CHAPTER 16 Advanced Topics
CHAPTER 17 Real-World ASP.NET MVC: Building the NuGet.org Website
APPENDIX ASP.NET MVC 5.1
Descarga:
Professional_ASPNET_MVC5
Titulo: Professional ASP.NET MVC 5
Autor: Jon Galloway, Brad Wilson, K. Scott Allen, David Matson
Editorial: Wrox
Nro Paginas: 620
Capítulos:
CHAPTER 1 Getting Started
CHAPTER 2 Controllers
CHAPTER 3 Views
CHAPTER 4 Models
CHAPTER 5 Forms and HTML Helpers
CHAPTER 6 Data Annotations and Validation
CHAPTER 7 Membership, Authorization, and Security
CHAPTER 8 Ajax
CHAPTER 9 Routing
CHAPTER 10 NuGet
CHAPTER 11 ASP.NET Web API
CHAPTER 12 Single Page Applications with AngularJS
CHAPTER 13 Dependency Injection
CHAPTER 14 Unit Testing
CHAPTER 15 Extending MVC
CHAPTER 16 Advanced Topics
CHAPTER 17 Real-World ASP.NET MVC: Building the NuGet.org Website
APPENDIX ASP.NET MVC 5.1
Descarga:
Professional_ASPNET_MVC5
Etiquetas:
AJAX,
Annotations,
ASP .NET,
Brad Wilson,
Controllers,
HTML Helpers,
Jon Galloway,
K. Scott Allen,
Libros,
Models,
MVC 5,
NuGet,
Professional,
Routing,
Security,
SPA,
Validation,
Views,
Web API,
Wrox
jueves, 5 de junio de 2014
El Libro del Día: jQuery Hotshot
El Libro del Día: 2014-06-05
Titulo: jQuery Hotshot
Autor: Dan Wellman
Editorial: Packt
Nro Paginas: 296
Capítulos:
Project One: Sliding Puzzle
Project Two: A Fixed Position Sidebar with Animated Scrolling
Project Three: An Interactive Google Map
Project Four: A jQuery Mobile Single-page App
Project Five: jQuery File Uploader
Project Six: Extending Chrome with jQuery
Project Seven: Build Your Own jQuery
Project Eight: Infinite Scrolling with jQuery
Project Nine: A jQuery Heat Map
Project Ten: A Sortable, Paged Table with Knockout.js
Descarga:
jQuery_Hotshot
Titulo: jQuery Hotshot
Autor: Dan Wellman
Editorial: Packt
Nro Paginas: 296
Capítulos:
Project One: Sliding Puzzle
Project Two: A Fixed Position Sidebar with Animated Scrolling
Project Three: An Interactive Google Map
Project Four: A jQuery Mobile Single-page App
Project Five: jQuery File Uploader
Project Six: Extending Chrome with jQuery
Project Seven: Build Your Own jQuery
Project Eight: Infinite Scrolling with jQuery
Project Nine: A jQuery Heat Map
Project Ten: A Sortable, Paged Table with Knockout.js
Descarga:
jQuery_Hotshot
Etiquetas:
Dan Wellman,
Google Maps,
jQuery,
Knockout,
Libros,
Packt,
SPA
Suscribirse a:
Entradas (Atom)
















