Download - 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
ASP .NET MVC6
Eduard TomàsCompulsive Developer at Plain [email protected]@eiximenishttp://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
DemoPá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
DemoView 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
DemoTag 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
DemoCreació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
DemoEjecució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
DemoControladores “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
DemoControladores 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
DemoLocalizació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