Novedades de ASP.NET MVC6

32

Transcript of Novedades de ASP.NET MVC6

Page 1: Novedades de ASP.NET MVC6
Page 2: Novedades de ASP.NET MVC6

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

Page 3: Novedades de ASP.NET MVC6

ASP .NET MVC6

Page 4: Novedades de ASP.NET MVC6

Eduard TomàsCompulsive Developer at Plain [email protected]@eiximenishttp://blogs.plainconcepts.com/aspnetspain/http://geeks.ms/blogs/etomas

Page 5: Novedades de ASP.NET MVC6

MVC6 – Novedades

Page 6: Novedades de ASP.NET MVC6

• 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”

Page 7: Novedades de ASP.NET MVC6

• 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

Page 8: Novedades de ASP.NET 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

Page 9: Novedades de ASP.NET MVC6

• 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

Page 10: Novedades de ASP.NET MVC6

DemoPáginas de error y diagnóstico

Page 11: Novedades de ASP.NET MVC6

• 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

Page 12: Novedades de ASP.NET MVC6

• 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

Page 13: Novedades de ASP.NET MVC6

DemoView Components

Page 14: Novedades de ASP.NET MVC6

• 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

Page 15: Novedades de ASP.NET MVC6

DemoTag Helpers

Page 16: Novedades de ASP.NET MVC6

• 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

Page 17: Novedades de ASP.NET MVC6

• 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

Page 18: Novedades de ASP.NET MVC6

DemoCreación de un TagHelper

Page 19: Novedades de ASP.NET MVC6

• 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

Page 20: Novedades de ASP.NET MVC6

DemoEjecución selectiva de TagHelpers

Page 21: Novedades de ASP.NET MVC6

• 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

Page 22: Novedades de ASP.NET MVC6

• 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

Page 23: Novedades de ASP.NET MVC6

DemoControladores “duales”

Page 24: Novedades de ASP.NET MVC6

• 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

Page 25: Novedades de ASP.NET MVC6

DemoControladores POCO

Page 26: Novedades de ASP.NET MVC6

• 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

Page 27: Novedades de ASP.NET MVC6

• 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

Page 28: Novedades de ASP.NET MVC6

DemoLocalización de controladores

Page 29: Novedades de ASP.NET MVC6

Learn more!

• ASP.NET Docs• http://asp.net/en/latest

• ASP.NET MVC • http://asp.net/vnext/mvc

• Github• http://github.com/aspnet

Page 30: Novedades de ASP.NET MVC6

Questions?

Page 31: Novedades de ASP.NET MVC6
Page 32: Novedades de ASP.NET MVC6

ASP .NET 5