Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

18 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
Mostrando entradas con la etiqueta aspnetmvc. Mostrar todas las entradas
Mostrando entradas con la etiqueta aspnetmvc. Mostrar todas las entradas
martes, 27 de noviembre de 2018
Desarrolladores Como sabemos, la inyección de dependencias está grabada a fuego en los genes de ASP.NET Core. La mayoría de sus componentes la usan internamente para obtener acceso a otros componentes que necesitan para cumplir sus funciones y, además, es una práctica recomendada en la parte que nos toca a nosotros como desarrolladores de aplicaciones.

Por ello, en ASP.NET Core MVC, lo habitual es que implementemos nuestros controladores atendiendo a este principio, y para ello utilicemos la técnica de inyección de dependencias en el constructor:
public class InvoiceController: Controller
{
    private readonly IInvoiceServices _invoiceServices;
    private readonly IMapper _mapper;
    private readonly ILogger<InvoiceController> _logger;

    public InvoiceController(
        IInvoiceServices invoiceServices, 
        ILogger<InvoiceController> logger,
        IMapper mapper)
    {
        _invoiceServices = invoiceServices;
        _logger = logger;
        _mapper = mapper;
    }
    ...
}
Nota: aunque en este post estemos hablando de controladores ASP.NET Core MVC, las ideas que vamos a comentar aquí son también aplicables a ASP.NET MVC "clásico" e incluso a otro tipo de frameworks que comparten los mismos conceptos.
martes, 23 de mayo de 2017
ASP.NET MVC 5El amigo José Antonio M. A., alumno de mi curso de ASP.NET MVC 5 en CampusMVP, me envió hace unos días una pregunta que he creído interesante comentar por aquí porque probablemente pueda ayudar a alguien más.

La cuestión que planteaba era relativa al mal funcionamiento de WebGrid cuando mostramos un campo de tipo enum y queremos ordenar por el mismo. Poco más o menos, me lo comentaba de la siguiente forma:
He incluido un campo enum en la clase del modelo y lo he incluido como columna en WebGrid.
[…]
Todo funciona bien menos el WebGrid, que no me ordena por esa columna. Al hacer click en ella ordena de forma correcta ascendentemente pero al hacer click otra vez no te ordena de forma descendente, mirando la url se ve que sortOrder no varía sigue siendo ASC. si lo cambio a mano a desc me lo ordena bien. ¿Es que el webgrid no ordena enumeraciones? ¿Cuál sería la solución, si quiero ordenar?
Obviamente, el hecho de que al cambiar a mano el parámetro sortOrder todo funcionara bien, dejaba de manifiesto que el problema no estaba en el controlador ni en el modelo, dejando la vista como única sospechosa de provocar ese problema.

Mis primeras respuestas iban orientadas a buscar un pequeño fallo en la forma de usar WebGrid o similar, porque me parecía algo bastante extraño, y, sobre todo, me parecía raro que no me hubiera pasado antes. José Antonio comentó, además, que había encontrado referencias por la red de que WebGrid tenía este problema, y que podía solucionarse si se forzaba una conversión de la enumeración a string a la hora de pasar los datos a la vista (!).

Y tras hacer varias pruebas, efectivamente, parece que algo hay. No sé si categorizarlo como bug del componente, o simplemente un comportamiento algo oscuro y poco previsible del mismo, pero en cualquier caso es interesante conocer este problema para poder atajarlo con éxito.
domingo, 5 de junio de 2016
Sorteo de Curso de ASP.NET MVC 5 en CampusMVPDe nuevo, mi generador de números seudoaleatorios ha introducido su inocente mano virtual en el bombo y ha elegido al afortunado ganador del sorteo del curso de ASP.NET MVC 5 en CampusMVP.

And the winner iiiiiis… momentos de emoción... redoble de tambores…

Adrián López Adrián López @aldacosta
Santiago de Compostela (Spain)

¡Enhorabuena, Adrián! En breve nos pondremos en contacto contigo y te daremos instrucciones para comenzar a disfrutar del premio cuanto antes :)

Muchas gracias a todos por participar, y por supuesto, a CampusMVP por el gran apoyo prestado en los preparativos y difusión de esta iniciativa.

Y chicos, estad atentos porque esto no acaba aquí, y en un par de días comenzamos un nuevo sorteo :) Mientras tanto, daos prisa si aún no habéis descargado vuestro libro de regalo de O'Reilly, que van quedando pocas semanas para el cierre!

Publicado en Variable not found
martes, 31 de mayo de 2016
Sorteo cerrado, ya tenemos el ganador :) Muchas gracias a todos por participar!
Sorteo de Curso de ASP.NET MVC 5 en CampusMVP En dos semanas que llevamos de celebración, supongo que ya habréis visto que la cosa va en serio ;D Hemos enviado ejemplares físicos de mi libro de SignalR a varios amigos del blog, alguno de ellos a la otra parte del mundo, y hemos regalado centenares de ebooks de O’Reilly (por cierto, recordad que este regalo sigue activo hasta junio, ¡aun tenéis tiempo de conseguir el vuestro!).

Cuando empecé a plantearme organizar la celebración del décimo aniversario del blog siempre tuve claro que si lo hacía tenía que ser a lo grande, proporcional a mi gratitud por vuestros años de apoyo, y esto sólo podía hacerlo consiguiendo que me acompañaran los más grandes. Y empecé a contactar con las principales compañías relacionadas con nuestro sector.

Como no podía ser de otra forma, los chicos de CampusMVP fueron los primeros en sumarse a la iniciativa aportando una suscripción a su popularísimo curso de Desarrollo Web con ASP.NET MVC, del que tengo el honor de ser autor y tutor desde hace más de cinco años.

El curso, valorado en cerca de 500 euros, se desarrolla completamente online y tiene una duración de 3 meses, durante los cuales se tiene acceso a un completo temario que recorre todos los aspectos del framework MVC, vídeos, prácticas y ejercicios que conseguirán que dominéis la materia, además de tenerme a vuestra disposición para solucionar dudas sobre el temario. Al finalizar obtendréis un certificado que acreditará vuestra participación y que os puede resultar muy interesante desde el punto de vista profesional.  Es, sin duda, de lo mejorcito que podéis encontrar en el mercado para aprender ASP.NET MVC (hey, que no lo digo yo que soy el padre, sino los cientos de alumnos que ya lo han hecho ;D).

Podéis ver más detalles del curso en su página oficial.

20 Consejos imprescindibles para programadores de C# y .NET
A continuación podéis ver las reglas para participar en el sorteo, pero, antes de entrar en materia, me gustaría recordaros que CampusMVP, líder en formación online en español, está continuamente ofreciendo información y recursos a la comunidad de desarrolladores a través de @campusMVP en Twitter, de su blog, su boletín electrónico mensual, y publicaciones electrónicas gratuitas. En este momento, por ejemplo, podéis descargar gratuitamente el libro en PDF “20 Consejos imprescindibles para programadores de C# y .NET”, más de 80 páginas de conocimiento concentrado sobre nuestro lenguaje favorito :)

¿Y cómo participo en el sorteo?

La forma de participar en este sorteo es muy parecida a la que utilizamos con los libros de SignalR semanas atrás, por lo que los méritos que hicisteis entonces os valdrán para participar también en este sorteo, pero introduciremos algunas leves variaciones.

Los que estéis interesados en participar sólo tenéis que conseguir "papeletas"; cada uno de vosotros podéis conseguir hasta cinco papeletas, dependiendo del grado de afinidad que mostréis con Variable not found y con nuestro patrocinador ;D Obviamente, cuantas más papeletas tengáis más probabilidades tendréis de ganar el premio.
  • Para conseguir la papeleta que os da derecho a participar en el sorteo sólo tenéis que escribir un comentario en este post del blog, el que queráis. Podéis aprovechar para contarme por qué queréis aprender MVC, o por qué consideráis que debería tocaros a vosotros el premio, o qué podríais ofrecerme a cambio de trucar el resultado y dároslo directamente ;D El caso es comentar algo, lo que sea. Y sobre todo incluid alguna vía para que pueda contactaros si sois los afortunados (preferiblemente email, pero también podría ser twitter o la dirección de vuestro perfil de facebook).
Ojo: si incluís el email en el comentario, usad alguna forma creativa de ocultarlo a los rastreadores para que no os frían a spam. Por ejemplo, "pedroperez en ge mail punto com", o "com gmail arroba joselito".
  • Si queréis una papeleta extra y, por tanto, más posibilidades de ganar, podéis seguir la nueva cuenta en twitter del blog, @variablnotfound e incluir en el texto del comentario anterior los caracteres "+TW1".
             
  • Obtendréis una papeleta adicional si seguís la página del blog en Facebook y añadís al comentario el texto "+FB".
             
  • Conseguiréis otra papeleta extra si seguís mi cuenta habitual de Twitter @jmaguilar. En este caso, debéis añadir al comentario el texto "+TW2".
              
  • Y si queréis una última papeleta, aseguraos de seguir en Twitter a @campusMVP, añadiendo el texto “+CAMPUSMVP” al comentario en el blog.
     
Para que os quede más claro, este sería un ejemplo de comentario de un participante que sigue a Variable Not Found en todos sus perfiles posibles y al patrocinador, por lo que participaría con todas las papeletas:
Hola, soy Manolito, me gustaría aprender ASP.NET MVC porque es lo que mi abuela siempre ha querido para mi. Y porque tengo un jamón en el almacén que no sé qué hacer con él, así que ya sabes ;D
Soy manolito en gemail seguido del correspondiente dotcom  
+TW1+TW2+FB+CAMPUSMVP
No olvidéis incluir en el comentario los textos "+TW1", "+TW2", "+FB" o “+CAMPUSMVP” para indicar los perfiles a los que seguís, pues tengo automatizado el proceso del sorteo y las papeletas se asignarán automáticamente en función de estas pistas incluidas en el comentario ;) Y aseguraos de que lo que indicáis es cierto, porque de no ser así seréis descalificados!

¿Cuándo se realiza el sorteo?

El sorteo se realizará el próximo domingo 5 de junio. Todos los comentarios que entren a partir del sábado a las 23:59 UTC+2 serán eliminados, como castigo por dejarlo para última hora ;D

Ese día, una aplicación leerá automáticamente los comentarios del post y asignará papeletas en función de los perfiles seguidos (+TW1, +FB…). La aplicación elegirá al azar un ganador, y verificaré manualmente que su papeleta sea correcta.

Tras ser elegido, me pondré personalmente en contacto con el ganador través de la vía que haya indicado al participar. Si por cualquier motivo no fuera capaz de contactar con él en un tiempo razonable, el premio sería sorteado de nuevo entre los participantes. También lo iremos difundiendo a través del blog y los distintos perfiles sociales.

Pues nada más, ya estáis tardando en participar. ¡Espero veros en el curso!

Publicado en Variable not found
martes, 17 de noviembre de 2015
ASP.NET CoreSeguro que ya conocéis la respuesta: no está. Desapareció. Kaput. Es simplemente otro de los efectos colaterales derivados de los cambios en ASP.NET Core, y más concretamente, de la sustitución del archivo web.config por otros mecanismos de configuración.

Sin embargo, seguro que también estaréis de acuerdo en que era una característica sumamente interesante porque nos permitía configurar el comportamiento de nuestra aplicación cuando se producía un error inesperado. Jugando un poco con la configuración podíamos optar por mostrar valiosa información de depuración, como datos sobre la excepción lanzada, el punto exacto donde se produjo o la pila de ejecución, o bien páginas de error personalizadas con mensajes aptos para todos los públicos (como la ballenita voladora de Twitter u otras creativas páginas "oops!" que inundan la red).
martes, 20 de octubre de 2015
ASP.NET CoreEstá claro que uno de los secretos para la creación de aplicaciones web de alto rendimiento es el uso apropiado del caché, y por esta razón todos los frameworks incorporan herramientas que hacen posible almacenar información que pueda ser reutilizadas para acelerar la respuesta de peticiones posteriores, como porciones de página o resultados de procesos costosos.

En ASP.NET 4.x y anteriores, siempre podíamos acceder a objeto Cache disponible en el contexto de la petición, o a los componentes presentes en System.Web.Caching y crear nuestras soluciones personalizadas, pero realmente MVC no aportaba más ayudas de serie que el filtro [OutputCache]. Su objetivo era cachear el resultado de acciones durante un tiempo determinado y reutilizarlo en peticiones siguientes, lo que era suficiente para muchos escenarios pero complicaba un poco otras necesidades comunes, como el cacheo de porciones de páginas.

Pero antes de continuar, un par de avisos:
  • Si aún no sabes lo que es un tag helper, ya estás tardando en leer este post ;)
  • ASP.NET se encuentra aún en desarrollo, por lo que parte de lo expuesto a continuación podría variar en la versión final del producto.
martes, 21 de abril de 2015
ASP.NET MVCSeguro que ya todos conocéis la fórmula mágica mediante la cual podemos activar la compilación de vistas en versiones de ASP.NET MVC anteriores a la 6. Los que no sepáis de qué os hablo, podéis echar un vistazo a este vídeo que publiqué en el blog de CampusMVP hace algún tiempo: VIDEO: Activar la compilación de vistas en ASP.NET MVC.

MvcBuildViewsMuy resumidamente, el asunto consistía en editar manualmente el archivo de proyecto de Visual Studio, con extensión .csproj, y establecer el contenido del tag <MvcBuildViews> a true.
martes, 24 de febrero de 2015
ASP.NET 5
Nota [05/10/2015] - Hay una versión actualizada de este post.
La inyección de dependencias ha sido un tema recurrente en Variable not found desde hace bastante tiempo, y dadas las grandes novedades incluidas en ASP.NET 5 al respecto estaba deseando hincarle el diente y publicar algo sobre el tema.

Para los perezosos, podríamos resumir el resto del post con una frase: ASP.NET 5 viene construido con inyección de dependencias desde su base, e incluye todas las herramientas necesarias para que los desarrolladores podamos usarla en nuestras aplicaciones de forma directa, en muchos casos sin necesidad de componentes de terceros (principalmente motores de IoC que usábamos hasta ahora). Simplemente, lo que veremos a continuación es cómo utilizar esta característica ;)

Pero permitidme una nota antes de empezar: si no sabes aún lo que es inyección de dependencias, el resto del post te sonará a arameo antiguo. Quizás podrías echar previamente un vistazo a este otro, Desacoplando controladores ASP.NET MVC, paso a paso, que aunque tiene ya algún tiempo, creo que todavía es válido para que podáis ver las ventajas que nos ofrece esta forma de diseñar componentes.

Ah, y recordad: todo lo que vamos a ver podría cambiar conforme vaya avanzando el desarrollo del producto, pero más o menos son cosas que parecen relativamente estables desde hace algún tiempo.
miércoles, 3 de diciembre de 2014
Aunque aún en beta e inmersa en un intenso proceso de desarrollo, la próxima versión de ASP.NET MVC está tomando forma en los hornos de Microsoft, y, sin ser definitivas, ya se pueden ver cuáles serán las novedades principales que la acompañarán.

En futuros posts iremos entrando en mayor detalle, pero de momento vamos a echar un vistazo desde una cierta distancia para tener la idea general sobre dónde estamos y la evolución que vamos a encontrar en las nuevas versiones de tecnologías y plataformas, de forma que podamos ver en qué nos afectará como desarrolladores y, en definitiva, para qué tenemos que irnos preparando.
Disclaimer: estamos aún en una fase en la que algunas cosas pueden cambiar y aún no existe información exhaustiva de muchos detalles, por lo que pueden existir ausencias o imprecisiones. Pero bueno, digo yo que el grueso será más o menos correcto ;-)

miércoles, 19 de noviembre de 2014
ASP.NET MVCPues sí, a mí me ha pasado, así que lo comento por aquí porque es posible que alguien más se vea en esta situación al ir a tocar una aplicación MVC antigua.

Resulta que hace unos días Microsoft distribuyó a través de Windows Update un parche de seguridad denominado Microsoft Security Bulletin MS14-059, clasificado como importante, y cuyo objetivo es corregir una vulnerabilidad descubierta en sistemas basados en MVC desde la versión 2 relativa a la forma en que el framework valida los datos de las peticiones entrantes, y que hacer que un atacante utilizara técnicas XSS para obtener un acceso privilegiado a sitios web.

Hasta aquí todo bien, el problema viene cuando por cualquier motivo tenemos que volver a compilar esas aplicaciones. Las versiones de MVC anteriores a la 5 referenciaban directamente a ensamblados guardados en el GAC con un número de versión determinada, que la instalación del parche de seguridad ha incrementado. Como consecuencia, al compilar estas aplicaciones obtenemos errores variopintos como el siguiente:
Could not locate the assembly "System.Web.Mvc,Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL".
La verdad es que al principio sorprende bastante (“¿Cómooo? Pero si hace meses que no toco esta aplicación, ¿cómo es posible que no compile? ¿Quién la ha roto?”), pero buscando un poco por la red es fácil encontrar varias soluciones.

La que a mí me ha funcionado consistió simplemente en ejecutar el siguiente comando en la consola del gestor de paquetes Nuget (ojo, ¡haced antes una copia del proyecto, por si falla!):
Install-Package Microsoft.AspNet.Mvc -Version <version> -Project <YourProjectName>
En la línea anterior debéis sustituir:
  • <YourProjectName> por el nombre de vuestro proyecto. Esto es simplente para asegurar que instaláis el paquete en el proyecto correcto si estáis usando una solución con varios de ellos.

  • <Version> depende de la versión del framework usada en el proyecto y debe ser:

    • 4.0.40804.0 si usáis MVC 4

    • 3.0.50813.1 si usáis MVC 3

Tras ello, Nuget descargará varios paquetes y dejará el proyecto actualizado.

Desde el blog oficial de herramientas y desarrollo web de .NET recomiendan comprobar que la propiedad “Copia local” esté activa en la referencia del proyecto hacia el ensamblado System.Web.Mvc, pues al parecer existe un bug conocido de Nuget que puede resetear dicha propiedad, y que necesariamente debe estar activa para que éste sea copiado a la carpeta /bin tras construirse la solución.

En mi caso no fue necesario hacer nada pues estaba todo correcto, y a partir de ese momento todo volvió a la normalidad y pude comenzar a compilar de nuevo sin problema.

Ya a la hora de desplegar al servidor, simplemente tened en cuenta unos detalles:
  • Tendréis que subir los binarios de Mvc, porque probablemente hasta el momento en el servidor se utilizaban los presentes en el GAC.
  • Estad atentos al web.config, porque en la misma instalación realizada por Nuget es posible que se hayan introducido modificaciones en él, que tendréis que actualizar en el servidor.
Por si esto no os funciona, os dejo un par de enlaces donde amplían la información y ofrecen algunas alternativas a este método:
Publicado en Variable not found.
martes, 3 de junio de 2014
ASP.NET MVCLa revisión 5.2 de ASP.NET MVC, cuya release candidate acaba de anunciarse, introduce algunas pequeñas mejoras en los helpers de generación de listas desplegables de esas que, aunque no son imprescindibles, sí nos simplifican un poco la vida a la hora de construir formularios. Estos cambios son:
  • La capacidad de agrupar elementos en una lista usando el tag <optgroup> de HTML.
  • La posibilidad de deshabilitar elementos individuales, de forma que aunque aparezcan en la lista no puedan ser seleccionados.
Vamos a verlas en detalle.
martes, 27 de mayo de 2014
Un truquillo rápido para un problema que seguro encontramos al utilizar Bootstrap en proyectos MVC (bueno, en realidad en cualquier tipo de proyecto ASP.NET publicado en IIS), y que espero os sea de utilidad: cómo solucionar el incómodo error 404 que encontramos al acceder a una página en la que se utiliza Glyphicons.

Error 404 al descargar archivo woff


martes, 6 de mayo de 2014
ASP.NET MVCPues continuamos profundizando en el sistema de rutado por atributos, o attribute routing, recientemente incluido en ASP.NET MVC y Web API. Si aún no conoces este mecanismo, te recomiendo que eches un vistazo a los dos artículos anteriores de la serie:
Como vimos en el último post, en las rutas es posible incluir restricciones a los parámetros de entrada, de forma que si las condiciones especificadas no se cumplen, el sistema de routing descartará la regla y continuará buscando en la tabla de rutas una entrada que encaje con la petición entrante.

Así, la acción Confirm() mostrada a continuación no será invocada ante peticiones como “/user/confirm/1234” o “/user/confirm/abcdef”:
[Route("user/confirm/{pin:alpha:length(4}"] // 4 alphabet chars (a-z)
public ActionResult Confirm(string pin) 
{ 
    ... 
}
Y como también veíamos en el post anterior, MVC y Web API traen de serie un buen número de restricciones (alpha, bool, decimal, int, length, etc.) que podemos emplear directamente sobre nuestras rutas, pero, lo que es mejor, se trata nuevamente de un mecanismo extensible: podemos crear nuestras propias restricciones para attribute routing sin demasiado esfuerzo.
martes, 1 de abril de 2014
ASP.NET MVCEn la entrega anterior de la serie hicimos una pequeña introducción al attribute routing introducido en ASP.NET MVC 5 y Web API 2, explicando cómo podíamos activar esta característica y las reglas básicas para la definición de rutas sobre acciones y controladores de ambos frameworks.

En esta ocasión vamos a ver cómo podemos incluir restricciones o constraints en dichas rutas, algo que podíamos conseguir también utilizando el rutado por convenciones pero de forma más farragosa y que ahora con attribute routing y otras mejoras incluidas en las últimas versiones de MVC y Web API se convierte en trivial.

Y ya de paso, repasaremos lo que son las restricciones de ruta y cómo podíamos usarlas en versiones anteriores de MVC y Web API, para que aquellos que aún no hayáis tenido oportunidad de trabajar con ellas.
martes, 25 de marzo de 2014
mvcComo seguro sabéis, una de las novedades que acompañan a MVC 5 es la inclusión de un nuevo mecanismo para la definición de rutas llamado attribute routing, que básicamente consiste en acercar el registro de rutas a las acciones y controladores que las utilizan en lugar de definirlas en el tradicional y lejano RouteConfig.cs.
lunes, 24 de marzo de 2014
ASP.NET MVC lifecycleProbablemente muchos ya estaréis al tanto, pero es algo tan sumamente interesante que no podía dejar de comentarlo por aquí. Resulta que hace unas semanas publicaron en el sitio oficial de ASP.NET MVC un documento en PDF que detalla minuciosamente el ciclo de vida de este tipo de aplicaciones: Lifecycle of an ASP.NET MVC 5 Application. Imprescindible.

Los impacientes podéis descargar directamente el PDF siguiendo este enlace e ignorar el resto de este post si lo creéis conveniente ;-P. Para los que tengáis algo más de tiempo, os resumo lo que vais a encontrar en él.
martes, 18 de marzo de 2014
ASP.NET MVCSoportar de forma medio decente tipos enumerados (enums) no era algo que no pudiéramos hacer con versiones anteriores de ASP.NET MVC, pero ya iba siendo hora de que el producto incluyera de serie herramientas para facilitarlo un poco. Y por fin, la revisión 5.1 de ASP.NET MVC algo ha aportado al respecto :)
martes, 11 de marzo de 2014
ASP.NET MVCEstá claro que Bootstrap ha calado hondo en los productos de la familia ASP.NET como marco de trabajo “oficial” para la maquetación de las páginas o vistas. Tanto es así, que incluso hay una característica introducida en la revisión 5.1 de MVC para facilitar el trabajo con el mismo, aunque siendo estrictos, puede beneficiar también al que opte por otro framework o incluso prefiera soluciones más artesanas.
miércoles, 26 de febrero de 2014
Curso de ASP.NET MVC 5 en CampusMVPY seguimos con los estrenos... ;) Si sólo hace unos días os presentaba mi nuevo libro sobre SignalR, llega ahora el turno a otro de los asuntos que me han tenido muy entretenido las últimas fechas: el nuevo curso de ASP.NET MVC 5 en CampusMVP.

Se trata de una revisión completa del curso de MVC 4 que tanto éxito de crítica y público ha tenido hasta la fecha, para adaptarlo por completo a las novedades presentes en la versión más reciente del marco de trabajo (en este caso la versión 5.1, aparecida en enero). El temario es, a grandes rasgos, el siguiente:
  • Introducción a ASP.NET MVC, donde realizamos un primer acercamiento al framework MVC, describimos el contexto tecnológico en el que se sitúa, y sentamos las bases sobre las que continuar el aprendizaje.
  • El siguiente módulo, la  primera aplicación ASP.NET MVC, crearemos nuestra primera aplicación partiendo de las plantillas por defecto de Visual Studio, que nos será de utilidad para comprender la estructura de este tipo de proyectos y el funcionamiento del marco de trabajo.
  • Continuaremos añadiendo funcionalidades a esta aplicación, donde introduciremos nuevas características partiendo desde cero, aprovechando la ocasión para profundizar en la creación de modelos, vistas y controladores.
  • Seguidamente estudiaremos la capa Modelo a fondo, viendo distintas formas de implementar sus componentes.
  • A continuación, nos sumergimos en la capa Controlador, detallando minuciosamente la creación de controladores, las posibilidades que nos ofrecen, y el conjunto de herramientas que nos facilita el framework para ellos, como el sistema de routing, el binding, filtros, o resultados de acciones.
  • También trataremos con gran detalle la creación de la capa Vista, donde describiremos sus tipos, implementación y mecanismos del marco de trabajo que nos facilitan la tarea, como los helpers estándar, plantillas, validadores, los helpers de Webpages, vistas para dispositivos móviles, o el sistema de bundling, entre otros, usando principalmente el motor de vistas Razor (aunque también se toca el motor ASPX).
  • En Ajax con ASP.NET MVC realizaremos un recorrido por las distintas alternativas para la introducción de Ajax en nuestros sistemas, y mostraremos la solución a escenarios comunes.
  • Veremos WebAPI, el framework para implementar servicios o APIs de nuestras aplicaciones, con una gran alineación con los protocolos de la red y el estilo arquitectural REST.
  • También trataremos cómo organizar los proyectos en Áreas, y los cambios que implican en cuanto a la estructura y funcionamiento de las aplicaciones.
  • Dedicaremos un capítulo a temas adicionales, básicamente para tratar otros aspectos no incluidos en los módulos anteriores, como la realización de pruebas unitarias y las facilidades para la resolución de dependencias, internacionalización, el despliegue de aplicaciones, o el sistema de autenticación basado en ASP.NET Identity.
  • Por último, presentamos BlogMachine y describimos sus principales componentes, sugiriendo modificaciones y ampliaciones que podrían realizarse para poner en práctica los conocimientos adquiridos.
Como venimos haciendo desde hace ya bastantes años, de una versión a otra no sólo vamos actualizando los contenidos de texto, vídeos, ejemplos y prácticas a las novedades de la última versión del framework, sino que aprovechamos cada actualización para hacerlo aún más potente. Ahora, por ejemplo, hemos incluido evaluaciones parciales para que puedas verificar tu progreso conforme avanzas o, en el último módulo del curso, una aplicación completa de ejemplo hecha desde cero para ver y tocar muchos de los conceptos tratados a lo largo del curso de forma integrada: BlogMachine.


El curso se imparte totalmente online a través de la plataforma CampusMVP, sin horarios y a vuestro propio ritmo. Podéis comenzarlo en cualquier momento y la duración del curso está estimada en 12 semanas (con una dedicación media de 6 o 7 horas por semana, dependiendo del nivel de partida).

Durante su duración tendréis acceso a una completísima documentación (más de 400 páginas) que podréis descargar una vez terminado, así como a más de dos horas y media de vídeos donde se muestran en vivo los principales conceptos tratados, aplicaciones de ejemplo, recursos adicionales, buenas prácticas y consejos del día a día que seguro convertirán MVC en vuestro marco de trabajo favorito. Además, dado que soy el tutor, contaréis con mi asistencia para resolver vuestras dudas sobre los temas tratados y ayudaros a lo largo del proceso formativo.

Si estáis interesados, sólo tenéis que ir a la tienda online de CampusMVP y apuntaros directamente. Ah, y tened en cuenta que si trabajáis en España los cursos pueden salirle gratis a vuestra empresa gracias a la formación bonificada.

¡Espero veros a muchos por allí! ;)

Publicado en Variable not found.
martes, 4 de febrero de 2014
ASP.NET MVCEn ASP.NET MVC, TempData es un mecanismo de lo más socorrido cuando se pretende hacer persistir información entre distintas peticiones de forma sencilla.
Hace ya bastante tiempo hablamos por aquí de cómo funciona, aunque resumidamente podríamos decir que se trata de un almacén temporal en el que podemos guardar datos desde una acción y consultarlos desde otra, aunque sea en peticiones distintas; la información se quedará almacenada hasta que sea obtenida por primera vez, momento en el que será eliminada del repositorio utilizado.

El principal problema que encontramos al utilizarlo en proyectos reales es que la información se guarda en variables de sesión, lo que en determinados escenarios puede ser muy costoso o simplemente imposible, y esto hace que descartemos su uso y que tengamos que inventar alternativas para solucionar problemas que usando TempData ya tendríamos resueltos.