Agenda
• ASP.NET 5 Introduction
• Unai Zorrilla
• Novedades de MVC 6
• Eduard Tomás
• break
• Migrando desde MVC 5 a MVC 6
• ASP.NET Cross Plattform
http://aka.ms/EvASPNET5
ASP .NET MVC6
Eduard Tomàs
Compulsive Developer at Plain Concepts
etomas@plainconcepts.com
@eiximenis
http://blogs.plainconcepts.com/aspnetspain/
http://geeks.ms/blogs/etomas
MVC6 – Novedades
• MVC6 es una evolución de MVC5
• El modelo de desarrollo es el mismo: controladores, vistas, modelo
• Los cambios más importantes vienen dados por las propias novedades de ASPNET5
(configuración, inyección dependencias, nuevo workflow de trabajo)
• Lo que conoces del modelo de desarrollo de MVC5 no está obsoleto
Antes de nada… lo qué sigue “igual”
• Agregar referencia a Microsoft.AspNet.MVC 6.0.0
• Configurar servicios MVC6 en Startup.ConfigureServices
• Añadir MVC6 al pipeline de ASPNET5 en Startup.Configure
Instanciación MVC6
• El paquete Microsoft.AspNet.Diagnostics proporciona la página de error
• Debe configurarse en Startup con app.UseDeveloperExceptionPage()
• Esta página proprciona mucho detalle de los errores. En escenarios fuera de
desarrollo debe usarse UseExceptionHandler()
Página de error
• El mismo paquete Microsoft.AspNet.Diagnostics proporciona una página de
diagnóstico
• Dicha página proporciona información de los paquetes cargados
• Debe añadirse al pipeline con app.UseRuntimeInfoPage()
• La URL por defecto es /runtimeinfo
Página de diagnostico
Demo
Páginas de error y diagnóstico
• Reemplazan a las vistas parciales de MVC5
— Puede verse un View Component como un “pequeño controlador”
— El VC tiene una única responsabilidad: devolver la vista parcial
• Separación de responsabilidades
— No es necesario “hinchar” un controlador existente
View Components
• Clase que herede de ViewComponent
— Opcional: Atributo [ViewComponent] para especificar nombre
• Declarar método IViewComponentResult Invoke(…)
• Crear la vista asociada en
/Views/Shared/<ViewComponent>/
• Uso: @Component(“nombre”).Invoke(...)
ViewComponents
Demo
View Components
• Permiten que una “etiqueta HTML” en una vista de Razor sea procesada en servidor
• No son Web Controls
• Sustituyen a los helpers clásicos de Razor
• Permiten una mayor integración con herramientas
Razor Tag Helpers
Demo
Tag Helpers
• Heredar de TagHelper
• Decorar con [HtmlTargetElement] indicando qué atributos y qué tag son respondidos
por el TagHelper
• Redefinir el método Process
Creación de un TagHelper
• La directiva addTagHelper “clase, assembly” importa el TagHelper indicado del
ensamblado correspondiente
• VS2015 incluye en _ViewImports.cshtml el código para importar todos los TagHelpers
de MVC6 en todas las vistas:
— @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
Importar TagHelpers
Demo
Creación de un TagHelper
• Si un TagHelper es importado para la vista actual se ejecutará en todas las etiquetas
HTML que coincidan con la etiqueta declarada en [HtmlTargetElement] siempre y
cuando contengan algunos de los atributos declarados
• Podemos preceder el nombre del tag con ! para indicar a Razor que no queremos
que se procese el TagHelper
• Podemos usar @tagHelperPrefix “prefijo” para forzar un prefijo para todos los
TagHelpers.
Ejecución selectiva de TagHelpers
Demo
Ejecución selectiva de TagHelpers
• Se soporta la directiva @inject para inyectar dependencias en vistas Razor
— @inject MyType MyVariable
• Ojo… Eso da mucho poder a las vistas, úsalo con cautela
• Recuerda la separación de responsabilidades de MVC
Inyección de dependencias en vistas
• WebApi se integra dentro de MVC
• Desaparece “ApiController”
• Un solo sistema de routing.
• Un solo sistema de model binding
• Una sola jerarquía de clases
• Un solo framework
Unificación de WebApi y MVC
Demo
Controladores “duales”
• No es necesario que un controlador herede de la clase base Controller
• Interesante en escenarios, donde por cualquier razón, los controladores deban
heredar de otra clase
Controladores POCO
Demo
Controladores POCO
• Primero elige en qué ensamblados pueden estar los controladores.
• El ensamblado debe tener al menos una referencia a:
— “Microsoft.AspNet.Mvc”
— “Microsoft.AspNet.Mvc.Core”
— “Microsoft.AspNet.Mvc.ModelBinding”
— “Microsoft.AspNet.Mvc.Razor”
— “Microsoft.AspNet.Mvc.Razor.Host”
— “Microsoft.AspNet.Mvc.TagHelpers”
• Se puede modificar este comportamiento implementando IAssemblyProvider
Como MVC6 descubre controladores
• Una clase es considerada un controlador, si estando en un ensamblado seleccionado:
— Es pública i no abstracta
— No es genérica
— No es una nested class
— Debe heredar de Controller o terminar su nombre en Controller
— No debe estar decorada con [NonController]
• Puede redefinirse este comportamiento proporcionando un ControllerTypeProvider
propio
Como MVC6 descubre controladores
Demo
Localización de controladores
Learn more!
• ASP.NET Docs
• http://asp.net/en/latest
• ASP.NET MVC
• http://asp.net/vnext/mvc
• Github
• http://github.com/aspnet
Questions?
ASP .NET 5

Novedades de ASP.NET MVC6

  • 2.
    Agenda • ASP.NET 5Introduction • Unai Zorrilla • Novedades de MVC 6 • Eduard Tomás • break • Migrando desde MVC 5 a MVC 6 • ASP.NET Cross Plattform http://aka.ms/EvASPNET5
  • 3.
  • 4.
    Eduard Tomàs Compulsive Developerat Plain Concepts etomas@plainconcepts.com @eiximenis http://blogs.plainconcepts.com/aspnetspain/ http://geeks.ms/blogs/etomas
  • 5.
  • 6.
    • MVC6 esuna evolución de MVC5 • El modelo de desarrollo es el mismo: controladores, vistas, modelo • Los cambios más importantes vienen dados por las propias novedades de ASPNET5 (configuración, inyección dependencias, nuevo workflow de trabajo) • Lo que conoces del modelo de desarrollo de MVC5 no está obsoleto Antes de nada… lo qué sigue “igual”
  • 7.
    • Agregar referenciaa Microsoft.AspNet.MVC 6.0.0 • Configurar servicios MVC6 en Startup.ConfigureServices • Añadir MVC6 al pipeline de ASPNET5 en Startup.Configure Instanciación MVC6
  • 8.
    • El paqueteMicrosoft.AspNet.Diagnostics proporciona la página de error • Debe configurarse en Startup con app.UseDeveloperExceptionPage() • Esta página proprciona mucho detalle de los errores. En escenarios fuera de desarrollo debe usarse UseExceptionHandler() Página de error
  • 9.
    • El mismopaquete Microsoft.AspNet.Diagnostics proporciona una página de diagnóstico • Dicha página proporciona información de los paquetes cargados • Debe añadirse al pipeline con app.UseRuntimeInfoPage() • La URL por defecto es /runtimeinfo Página de diagnostico
  • 10.
    Demo Páginas de errory diagnóstico
  • 11.
    • Reemplazan alas vistas parciales de MVC5 — Puede verse un View Component como un “pequeño controlador” — El VC tiene una única responsabilidad: devolver la vista parcial • Separación de responsabilidades — No es necesario “hinchar” un controlador existente View Components
  • 12.
    • Clase queherede de ViewComponent — Opcional: Atributo [ViewComponent] para especificar nombre • Declarar método IViewComponentResult Invoke(…) • Crear la vista asociada en /Views/Shared/<ViewComponent>/ • Uso: @Component(“nombre”).Invoke(...) ViewComponents
  • 13.
  • 14.
    • Permiten queuna “etiqueta HTML” en una vista de Razor sea procesada en servidor • No son Web Controls • Sustituyen a los helpers clásicos de Razor • Permiten una mayor integración con herramientas Razor Tag Helpers
  • 15.
  • 16.
    • Heredar deTagHelper • Decorar con [HtmlTargetElement] indicando qué atributos y qué tag son respondidos por el TagHelper • Redefinir el método Process Creación de un TagHelper
  • 17.
    • La directivaaddTagHelper “clase, assembly” importa el TagHelper indicado del ensamblado correspondiente • VS2015 incluye en _ViewImports.cshtml el código para importar todos los TagHelpers de MVC6 en todas las vistas: — @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers" Importar TagHelpers
  • 18.
  • 19.
    • Si unTagHelper es importado para la vista actual se ejecutará en todas las etiquetas HTML que coincidan con la etiqueta declarada en [HtmlTargetElement] siempre y cuando contengan algunos de los atributos declarados • Podemos preceder el nombre del tag con ! para indicar a Razor que no queremos que se procese el TagHelper • Podemos usar @tagHelperPrefix “prefijo” para forzar un prefijo para todos los TagHelpers. Ejecución selectiva de TagHelpers
  • 20.
  • 21.
    • Se soportala directiva @inject para inyectar dependencias en vistas Razor — @inject MyType MyVariable • Ojo… Eso da mucho poder a las vistas, úsalo con cautela • Recuerda la separación de responsabilidades de MVC Inyección de dependencias en vistas
  • 22.
    • WebApi seintegra dentro de MVC • Desaparece “ApiController” • Un solo sistema de routing. • Un solo sistema de model binding • Una sola jerarquía de clases • Un solo framework Unificación de WebApi y MVC
  • 23.
  • 24.
    • No esnecesario que un controlador herede de la clase base Controller • Interesante en escenarios, donde por cualquier razón, los controladores deban heredar de otra clase Controladores POCO
  • 25.
  • 26.
    • Primero eligeen qué ensamblados pueden estar los controladores. • El ensamblado debe tener al menos una referencia a: — “Microsoft.AspNet.Mvc” — “Microsoft.AspNet.Mvc.Core” — “Microsoft.AspNet.Mvc.ModelBinding” — “Microsoft.AspNet.Mvc.Razor” — “Microsoft.AspNet.Mvc.Razor.Host” — “Microsoft.AspNet.Mvc.TagHelpers” • Se puede modificar este comportamiento implementando IAssemblyProvider Como MVC6 descubre controladores
  • 27.
    • Una clasees considerada un controlador, si estando en un ensamblado seleccionado: — Es pública i no abstracta — No es genérica — No es una nested class — Debe heredar de Controller o terminar su nombre en Controller — No debe estar decorada con [NonController] • Puede redefinirse este comportamiento proporcionando un ControllerTypeProvider propio Como MVC6 descubre controladores
  • 28.
  • 29.
    Learn more! • ASP.NETDocs • http://asp.net/en/latest • ASP.NET MVC • http://asp.net/vnext/mvc • Github • http://github.com/aspnet
  • 30.
  • 32.

Notas del editor

  • #11 DemoPaginas.sln
  • #12 Explicación de lo que son los View Components, qué rol juegan y como se usan
  • #13 Mencionar la versión asíncrona de Invoke (InvokeAsync)
  • #14 Mostrar DemoVC.sln Mencionar la inyección de dependencias en ViewComponents
  • #16 Enseñar los TagHelpers de formulario DemoTagHelper.sln -> Vista Home/Contact
  • #19 DemoTagHelper.sln -> Repeater
  • #24 DemoDual.sln Comentar código y mencionar serialización json / xml
  • #26 DemoPoco.sln
  • #29 DemoControllersLocation.sln