Beruflich Dokumente
Kultur Dokumente
Tabla de Contenidos
ACERCA DEL AUTOR ............................................................. 4
REGISTRO DE CAMBIOS........................................................ 5
INTRODUCCIN PERSONAL - PORQU UNA GUA
INTRODUCTORIA A MVC ...................................................... 7
CAPTULO UNO UNA INTRODUCCIN A .NET 2015 Y
ASP.NET 5 ................................................................................. 9
CAPTULO DOS EL PATRN QUE TODOS AMAN, MVC
.................................................................................................. 12
CAPTULO TRES ASP.NET MVC 6 SIN PERDERSE ....... 14
Una pequea introduccin al desarrollo web ........................ 14
ASP.NET MVC 6 ................................................................. 15
VISTAS ................................................................................ 27
CONTROLADORES............................................................ 31
MODELOS ........................................................................... 35
EJERCICIOS ........................................................................ 35
Agregar una nueva vista .................................................... 35
Comunicacin cliente hacia servidor ................................ 37
CAPTULO CUATRO CARACTERSTICAS AVANZADAS
.................................................................................................. 41
Pase de informacin entre el controlador y la vista ............... 41
Validaciones ......................................................................... 46
Vistas parciales vs ViewComponents (VCs) ......................... 52
Agregando una base de datos ................................................ 58
Usando Dependency Injection .............................................. 65
CONCLUSIN......................................................................... 68
REGISTRO DE CAMBIOS
Esta es la segunda versin de este libro, la cual incluye arreglos,
comentarios extra y todo lo liberado de manera oficial en Visual
Studio 2015 RTM para MVC 6. Tratar de enumerar la mayora
de cambios impactantes en esta seccin para que si ya leste la
versin 1, puedas enfocarte solamente en lo nuevo. Si lees este
libro por primera vez puedes ignorar esta seccin y pasar al
siguiente captulo. Gracias especiales a todas las personas que
leyeron la primera versin de este libro, se suscribieron e inclusive
enviaron agradecimientos y retroalimentacin. Ya que al da de
hoy el libro tiene ms de 615 descargas y ms de 120 suscriptores.
Lo interesante es que actualmente el cambio entre una versin
Release Candidate (RC) versin con la cual liber la primera
versin de este libro y la versin Release to Manufacturing
(RTM) versin con la cual libero esta segunda versin no
varan demasiado entre s, ya que Microsoft ha sido muy abierto
durante el proceso de desarrollo y liberado anticipadamente cada
nueva caracterstica.
Cambios:
Cambio de formato
o Decid transcribir el libro a un documento PDF
regular. Inicialmente as comenc a escribirlo y
casi lo termin, sin embargo me recomendaron
transcribirlo a un formato ms compatible con
mltiples dispositivos de manera nativa por eso
opt por utilizar el editor en lnea de leanpub, sin
embargo el formato de markdown que utiliza no
es muy flexible y el editor tiene ciertos problemas
que me inclinaron a volver a un formato ms de
PDF normal.
C#
HTML
CSS
JavaScript
10
11
12
13
14
15
ASP.NET MVC 6
Qu mejor forma de comenzar a aprender una tecnologa que ir
directo al cdigo y explorarlo? Pues ese ser el siguiente pas en
este libro. Durante todo el recorrido se irn mencionando algunos
conceptos importantes y al final un par de ejemplos.
Antes de comenzar, es importante entender que una plantilla de
Visual Studio, no es ms que una serie de DLLs que funcionan
para un fin especfico incluidas en un proyecto + una base de
cdigo configurativa de la tecnologa + uno o varios ejemplos de
cdigo. Es decir, si uno quisiera hasta podra empezar un proyecto
sin necesidad de seleccionar un template de Visual Studio.
Estructura de solucin
Archivos no especficos de usuario: archivos propios del
software, que pueden ser controlados por un manejador de
versiones tal como TFS o Github.
-sln
.csproj o .vbproj
-suo
.csproj.user o .vbproj.user
16
17
Nuevo Proyecto
El siguiente paso es seleccionar la plantilla de MVC 6, debe fijarse
que seleccione .NET Framework 4.6 y colocar un nombre de
proyecto y de solucin acorde a sus necesidades ya que este ser
el nombre de espacio que seguir su proyecto (orden interno del
proyecto). Usualmente y por estndar de Microsoft se nombra el
nombre de espacio de la siguiente forma
18
19
Cambiar autenticacin
Esta ventana da la opcin de seleccionar la estrategia de
autenticacin, por lo cual se debe tener de antemano una idea de
20
21
Estructura Proyecto
Los primeros niveles son:
Solutions Items
src
Archivo global.json
En el siguiente folder src donde se ven los archivos propios del
proyecto, como ya se han conocido anteriormente.
Dentro del folder src parecen los proyectos de la solucin, en este
ejemplo solo existe el proyecto de Interfaz de Usuario
wm.website.ui.
En este nuevo proyecto de MVC 6 aparece un folder llamado
wwwroot (nuevo en esta versin), el cual contiene archivos que
no deben ser compilados, tales como hojas de estilo (CSS),
imgenes y archivos de JavaScript.
22
23
Folder wwwroot
A nivel de raz de proyecto hay otros archivos extensin .json,
tales como bower.json, config.json, package.json y project.json.
S! No hay web.config por defecto, sin embargo ASP.NET 5
soporta archivos configurativos en formato XML, INI o JSON.
Para tratar de entender todo este cambio configurativo se har un
pequeo overview de cada archivo.
bower.json
El archivo bower.json, contiene, como su nombre lo dice,
configuraciones propias de bower.
Qu es bower? Bower, al igual que
NPM son administradores de paquetes,
algo as como NuGet pero se comparten
entre diferentes tecnologas ya que
usualmente no dependen de la
tecnologa backend. En este caso
Bower permite manejar dependencias
de lado cliente, tales como jquery,
bootstrap,
etc.
config.json,
package.json y project.json
Entre estos archivos prcticamente se distribuyen las
configuraciones que anteriormente existan en el archivo
web.config. Si eres nuevo en desarrollo web sobre .NET, el
web.config era un archivo XML que contena configuraciones
propias del proyecto.
Durante este libro no se va a ahondar tantsimo en cada detalle
nuevo, ms bien, se intentar que sea algo ms funcional y directo
a entender lo mnimo necesario de ASP.NET 5.
El archivo Startup.cs es el que invoca los .json e inyecta
dependencias necesarias (ms adelante se conversar un poco ms
al respecto).
Gulp
El desarrollo web moderno utiliza herramientas que permiten
crear mejores aplicaciones (ms veloces, optimizadas y seguras).
Anteriomente se mencionaron Grunt y Gulp por encima, voy a
tratar de ahondar un poco ms en Gulp que es el task runner
incluido por defecto.
Un task runner es permite automatizar un flujo de desarrollo web
para crear N cantidad de tareas a ejecutarse en diversos puntos de
ASP.NET MVC 6 - UNA GUA INTRODUCTORIA
24
25
Dependency Injection
El patrn Dependency Injection o Inyeccin de Dependencias
exista en MVC, Web API y SignalR desde antes, sin embargo no
de manera tan explcita ni tan consistente. Es por esto que
ASP.NET 5 se unific esta seccin de manera ms consistente.
Dependency Injection permite acceder a servicios en diferentes
puntos de la ejecucin de un sistema, por ejemplo en controladores
o apenas inicia la aplicacin. Adems trae un contenedor de
Dependency Injection que permite consolidar el sistema y sus
configuraciones. Ms adelante mostrar un ejemplo de cmo
utilizar Dependency Injection con la abstraccin por defecto de
ASP.NET 5, sin embargo esta puede ser reemplazada por otro
contener como Ninject o Autofact.
26
27
Ejecucin bsica
VISTAS
Lo primero que se ver en esta lnea sern las vistas y cmo
funcionan entre s.
Dnde estn ubicadas? En el folder Views.
Qu extensiones tienen? .cshtml o .vbhtml dependiendo del
lenguaje de programacin, si es C# la extensin es cshtml, si es
Visual Basic la extensin es vbhtml.
Qu lenguaje se utiliza? HTML a travs del pre compilador de
HTML llamado Razor.
Layout
layout.cshtml
Este archivo incluye todo el marco y plantilla HTML, es decir,
tags como <head>,
Al abrir este archivo se puede apreciar algo nuevo en esta versin
de ASP.NET, el tag environment el cual permite, segn el
despliegue que se realice, agregar unos u otros archivos de scripts
y hojas de estilos. Por ejemplo para el momento de desarrollo
sirven los archivos fuentes iniciales, sin embargo en produccin
usualmente los archivos que se envan a un usuario son los
archivos de hojas de estilo y scripts minificados y obfuscados.
Esto para evitar el uso innecesario de ancho de banda y complicar
la lectura del cdigo fuente que se descarga del lado cliente y que
durante desarrollo se pueda realizar depuracin de cdigo
JavaScript.
28
29
Etiqueta Environment
Al investigar un poco ms el archivo se puede encontrar la
sentencia @RenderBody() en esta parte del HTML se renderizar
el resto de pginas que utilicen este archivo de layout.
La manera de asignar este layout a diferentes pginas es a travs
de una variable llamada Layout. Es decir si en alguna vista se
asigna algn valor a esa variable global, esa pgina utilizar ese
archivo de layout. Con el siguiente diagrama se intentar explicar
un poco ms claro esto.
Renderizacin vista
Como se pudo notar al ejecutar el proyecto, la pgina que fue
retornada ya traa un layout y contenido renderizado, esto es
porque por defecto cada vista creada tiene un layout por defecto.
Esta configuracin se realiza en el archivo _ViewStart.cshtml. Es
decir, si no se indica explcitamente en cada vista cual archivo de
Asignacin Layout
La sentencia anterior definida por
@{
}
Bloque de cdigo
El smbolo @ tambin permite utilizar tambin lo que se conoce
como Tag Helpers. Los cuales bsicamente renderizn bloques de
HTML basndose en cierta lgica, fuera de caja se incluyen los
conocidos como HTML Helpers.
Existen diferentes Tag helpers que se pueden utilizar por ejemplo
optar por el que ha venido desde versiones anteriores:
30
31
HTML Helper
O utilizar uno de los nuevos tag helpers que permite un cdigo
ms limpio al utilizar atributos de HTML. Por ejemplo:
Vistas de contenido
Las vistas contienen el HTML base + lo renderizado por el Razor.
Su contenido depender de la informacin que se desea mostrar,
ms adelante se mostrar cmo se asocia con un controlador y con
un modelo.
CONTROLADORES
Un controlador se conforma de una clase con funciones que
responden solicitudes HTTP. La clase equivale al nombre del
controlador y la funcin equivale al nombre de la accin.
Nombre de Clase = Controlador
Nombre de Funcin = Accin
Por ejemplo en el archivo Controllers/HomeController
Clase de controlador
De esa manera, se crea un extremo (endpoint web) que puede ser
consultado a travs de un cliente que pueda realizar solicitudes
HTTP (un navegador, un robot, un dispositivo). Por ejemplo
segn la imagen anterior en HomeController existen las siguientes
2 rutas que responden solicitudes, acorde a la siguiente
convencin
http://localhost:<puerto>/<CONTROLADOR>/<ACCION>
http://localhost:<puerto>/Home/Index
http://localhost:<puerto>/Home/About
32
33
Plantilla de ruteo
En esa seccin de cdigo se define la convencin a seguir, es decir
{controlador}/{accin}/{id opcional}
Plantilla de ruteo
La funcin View se puede colocar sin pasar parmetros por lo cual
la funcin buscar una vista que est en el folder Views/<Nombre
de Controlador>/<Nombre de Accin>. En este caso retornar
la vista que est ubicada en Views/Home/About. Sin embargo
tambin se puede indicar explcitamente el nombre de la vista que
ASP.NET MVC 6 - UNA GUA INTRODUCTORIA
34
35
MODELOS
Los modelos son clases que representan objetos de dominio y
pueden ser utilizados por la lgica de negocio y acceso a datos
para manipular informacin. Estn ubicado en la plantilla en el
folder Models.
EJERCICIOS
Agregar una nueva vista
Para este ejercicio se necesitar una nueva vista que sea retornada
al hacer una consulta HTTP a un url.
36
37
5. Disfrutar el resultado
38
39
40
41
CAPTULO CUATRO
CARACTERSTICAS AVANZADAS
En el captulo anterior se hizo un recorrido inicial por ciertas
funcionalidades principales de ASP.NET MVC 6. En el cual se
pudo conocer lo bsico de cada componente y cmo lograr
comunicacin y empezar a extender el proyecto bsico.
42
43
return View(items);
44
45
@model List<Item>
<h1>@ViewBag.Mensaje</h1>
<ul>
@foreach(var item in Model)
{
<li>id: @item.Id nombre: @item.Nombre</li>
}
</ul>
Validaciones
En un sistema robusto, debe existir validaciones de datos de lado
cliente y de lado servidor, si bien estas se pueden crear
manualmente, uno a uno, esta tarea puede ser un poco engorrosa
y compleja de mantener. Para esto ASP.NET MVC cuenta con una
librera llamada DataAnnotations la cual permite definir qu
validaciones se necesitan en el formulario de lado servidor y a
travs de jQuery Validate validar lado cliente. Las dataannotations
ASP.NET MVC 6 - UNA GUA INTRODUCTORIA
46
47
estn
en
el
nombre
de
espacio
System.ComponentModel.DataAnnotations y permiten no solo
especificar cierta informacin de validacin, sino tambin ciertos
metadatos que Razor entender, como cual texto mostrar en el
label.
DataAnnotations
1. Vaya al archivo Models/Item.cs y reemplace el contenido
de la clase por el siguiente.
using System.ComponentModel.DataAnnotations;
namespace <sunombredeespacio>.Models {
public class Item
{
[Required(ErrorMessage = "El identificador del
tem es obligatorio")]
public int Id { get; set; }
[Required(ErrorMessage ="El nombre del tem es
obligatorio")]
[Display(Name ="Nombre de tem")]
[MaxLength(10, ErrorMessage ="El nombre del
tem no debe superar los 10 caracteres")]
public string Nombre { get; set; }
}
}
48
49
@{await
Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
50
51
52
53
</div>
<div class="noticias">
<h4>Hololens est aqu!</h4>
<p>Est porta ac magna lundium? Amet eros. Lorem
cum ut auctor vel integer mus tortor, adipiscing platea
penatibus, in placerat, lectus adipiscing! Ultrices scelerisque
adipiscing parturient!</p>
</div>
<div class="clearer"></div>
</div>
<style>
.bannerNoticias {
border:solid 1px #aaa;
border-radius:10px;
padding:12px;
}
.bannerNoticias .noticias {
display:inline-block;
float:left;
max-width:200px;
font-size:12px;
}
.clearer{
clear:both;
}
</style>
54
55
Ejemplo de ViewComponent
En este caso crearemos un viewcomponent que logre lo mismo
que la vista parcial anterior, sin embargo esta vez obtendremos las
noticias desde el cdigo, lo que ms adelante podra ser
reemplazado por datos desde una base de datos.
1. Crear un folder llamado ViewComponents en la raz del
proyecto.
2. Cree
una
clase
llamada
BannerInteractivoViewComponent.cs
3. Reemplace el contenido de la clase por el siguiente.
using Microsoft.AspNet.Mvc;
using System.Collections.Generic;
using System.Linq;
namespace <sunombredeespacio>.ViewComponents
{
public class BannerInteractivoViewComponent :
ViewComponent
{
4. Ahora,
cree
un
folder
en
la
direccin
Views/Shared/Components y dentro de ese folder, cree
otro
llamado
BannerInteractivo
(Views/Shared/Components/BannerInteractivo) y luego
cree una vista que se llame Default.cshtml, agrege el
siguiente contenido a la vista (el css se agrega en el
mismo archivo solamente por simplicidad, no es una
buena prctica bajo ninguna razn).
@model Dictionary<string, string>
<h2>Esto podra venir de una base de datos!</h2>
ASP.NET MVC 6 - UNA GUA INTRODUCTORIA
56
57
<div class="bannerNoticias">
<p>Noticias</p>
@foreach (var item in Model)
{
<div class="noticias">
<h4>@item.Key</h4>
<p>@item.Value</p>
</div>
}
<div class="clearer"></div>
</div>
<style>
.bannerNoticias {
border: solid 1px #aaa;
border-radius: 10px;
padding: 12px;
}
.bannerNoticias .noticias {
display: inline-block;
float: left;
max-width: 200px;
font-size: 12px;
}
.clearer {
clear: both;
}
</style>
58
59
60
61
{
"AppSettings": {
"SiteTitle": "wm.website.ui"
},
"Data": {
"DefaultConnection": {
"ConnectionString":
"Server=(localdb)\\mssqllocaldb;Database=aspnet5wm.website.ui-a913355d-72f6-4d80-892a19699864e285;Trusted_Connection=True;MultipleActiveRes
ultSets=true"
}
},
"EntityFramework": {
"ConnectionString": <conexion a su base de datos>
}
}
namespace <sunombredeespacio>.ui.ViewComponents
{
public class BannerInteractivoViewComponent :
ViewComponent
{
List<Noticia> noticias = new List<Noticia>();
NoticiasAppContext db;
public
BannerInteractivoViewComponent(NoticiasAppContext
_context)
{
db = _context;
}
public IViewComponentResult Invoke()
{
// Limpiemos la base de datos
if (db.Noticias.Count() > 0)
db.Noticias.RemoveRange(db.Noticias);
db.SaveChanges();
// Recreemos los 3 archivos
db.Noticias.AddRange(new List<Noticia>() {
new Noticia() { Id=1, Titulo="Costa Rica en el
puesto #13 de FIFA", Descripcion="Est porta ac magna
lundium? Amet eros. Lorem cum ut auctor vel integer mus
tortor, adipiscing platea penatibus, in placerat, lectus
adipiscing! Ultrices scelerisque adipiscing parturient!" },
new Noticia() { Id=1, Titulo="Nuevo ASP.NET 5",
Descripcion="Est porta ac magna lundium? Amet eros. Lorem
cum ut auctor vel integer mus tortor, adipiscing platea
penatibus, in placerat, lectus adipiscing! Ultrices scelerisque
adipiscing parturient!" },
new Noticia() { Id=1, Titulo="Hololens est aqu!",
Descripcion="Est porta ac magna lundium? Amet eros. Lorem
cum ut auctor vel integer mus tortor, adipiscing platea
penatibus, in placerat, lectus adipiscing! Ultrices scelerisque
adipiscing parturient!" }
ASP.NET MVC 6 - UNA GUA INTRODUCTORIA
62
63
});
db.SaveChanges();
return View(db.Noticias.ToList());
}
}
}
.bannerNoticias .noticias {
display: inline-block;
float: left;
max-width: 200px;
font-size: 12px;
}
.clearer {
clear: both;
}
</style>
10. Ahora, el siguiente procedimiento es porque ASP.NET 5
sigue en proceso, pero ms adelante ser ms simple.
a. Abra el command prompt (busca cmd en las
aplicaciones instaladas en Windows).
b. Utilice la herramienta cd para ir al folder del
proyecto, por ejemplo Documents\Visual Studio
2015\Projects\wm.website.ui\src\wm.website.ui
c. Corra los siguientes comandos para habilitarle el
Migration al Code First (para que pueda crear la
base de datos por primera vez y dems)
i. dnvm install 1.0.0-beta5
ii. dnvm use 1.0.0-beta5
iii. dnx . ef migration add MyFirstMigration
c NoticiasAppContext
iv. dnx . ef migration apply c
NoticiasAppContext
11. Al concretar este punto, ejecute la aplicacin (F5) se
podrn ver las noticias pero saliendo de una base de datos
SQL Server.
64
65
66
67
CONCLUSIN
Cmo hemos podido ver, ASP.NET 5 trae muchsimas mejoras y
es un framework sumamente robusto para aplicaciones web
complejas.
Espero sinceramente que este libro les sea de utilidad para
adentrarse a tpicos ms complejos, que sea una referencia ligera
para sus proyectos, sin embargo no espero que lo utilicen como
una referencia definitiva al lenguaje, el patrn o el framework.
Dependiendo del xito de este libro, estar tratando de sacar otros
ms avanzados y de los cuales tengo algunos temas en mente, tales
como caractersticas avanzadas en MVC, aplicaciones MVC 6 con
AngularJS, Web API avanzado, Microsoft Azure, entre otros. As
que agradezco si pudieran brindarme feedback de este, mi primer
libro tcnico. Gracias a su feedback estar envindoles a su correo
electrnico cuando saque actualizaciones de esta serie u otros
libros de inters que genere en espaol.
Contacto
Email: contacto@waltermontes.com
Twitter: @tewar93
http://waltermontes.com
68