Ha sido un trabajo duro, no es una tarea sencilla estructurar y desarrollar contenidos de cierto volumen partiendo de cero, pero creo que el resultado ha valido la pena. El temario, salpicado con más de dos horas de vídeos demostrativos, ejemplos, y recursos adicionales, es el siguiente:
- Introducción a ASP.NET MVC, donde realizamos un primer acercamiento al framework MVC, y sentamos las bases sobre las que continuar el aprendizaje.
- En 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, plantillas, o validadores, entre otros.
- 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.
- 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.
- Y por último, 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, internacionalización, o el despliegue de aplicaciones.
Si estáis interesados, sólo tenéis que ir a la tienda online de CampusMVP y apuntaros directamente. Tened en cuenta que si trabajáis en España los cursos pueden salirle gratis a la empresa gracias a la formación bonificada.
¡Os espero! ;-)
Enlaces:
- Presentación oficial del curso “Desarrollo Web con ASP.NET MVC 2”.
- “Desarrollo Web con ASP.NET MVC 2” en la tienda on-line de CampusMVP.
Publicado por José M. Aguilar a las 7:25 p. m.
Etiquetas: aspnetmvc, autobombo, curso, desarrollo
Espero os resulten interesantes :-)
AntiXSS como codificador de salida por defecto en ASP.NET. Scott Guthrie recently wrote about the new syntax for HTML encoding output in ASP.NET 4. I also covered the topic of HTML encoding code nuggets in the past as well providing some insight into our design choices for the approach we took. Fuente: haacked.com Fecha: 09/04/2010 | |
Stephen Walther habla sobre cómo mantener el historial del navegador en aplicaciones Ajax. One objection that people always raise against Ajax applications concerns browser history. Because an Ajax application updates its content by performing sneaky Ajax postbacks, the browser backwards and forwards buttons don’t work as you would normally expect. Fuente: stephenwalther.com Fecha: 09/04/2010 | |
Creación de interfaces de introducción de datos con MVC 2. The next part to this article series on MVC 2.0 is the user interface. We saw in the last article some basics on the changes of the user interface, which we'll delve into more in this article series. Here we will begin to look at how developers can construct the view user interface. Fuente: dotnetslackers.com Fecha: 09/04/2010 | |
Novedades de VS 2010 relativas al soporte de Intellisense en javascript. ASP.NET, Visual Studio, ASP.NET 2.0, .NET Fuente: weblogs.asp.net Fecha: 09/04/2010 | |
Interesante debate sobre la forma de gestionar el envío de passwords a la vista. Let's suppose you have a model like this: public class User { public string Username { get; set; } [DataType(DataType.Password)] public string Password { get; set; } } To test this out, you write an action: public ActionResult Index() {... Fuente: bradwilson.typepad.com Fecha: 08/04/2010 | |
Proveedor LINQ para Twitter, en Codeplex. LINQ to Twitter is a LINQ Provider for the Twitter micro-blogging service. It uses standard LINQ syntax for queries and includes method calls for changes via the Twitter API.ExampleYou can try LINQ to Twitter, even if you don't have a twitter account. ... Fuente: linqtotwitter.codeplex.com Fecha: 08/04/2010 | |
¿Un ViewEngine para Balsamiq? Invitation Message: A preview of the message appears below. A link and password (if necessary) is automatically appended to the message upon sending. A Screencast.com user has invited you to view content on Screencast.com: Fuente: http://www.screencast.com/ Fecha: 08/04/2010 | |
Serie de posts estudiando la propuesta de Áreas Portables del proyecto MvcContrib. Fuente: geekswithblogs.net Fecha: 07/04/2010 | |
Rutas editables moviendo el código de inicialización al global.asax. Introduction : Phil Haack's had written two great articles about Editable Routes, Editable Routes or Editable Routes Using App_Code.These Article are great. But if you not need to unit test your ... Fuente: weblogs.asp.net Fecha: 07/04/2010 | |
Cómo renderizar una plantilla a un string en MVC 2. Por ejemplo, para componer mensajes de correo en formato HTML. In one of the projects that I am currently working on we have a lot of different emails we want to send out to users and we would like to build those emails from templates. My goal was the leverage the ... Fuente: http://www.joeyb.org/ Fecha: 07/04/2010 | |
Aspectos importantes para evitar el síndrome "It works on my machine". ALT.NET dotnet .NET C# Agile BizTalk ASP.NET Fuente: codebetter.com Fecha: 07/04/2010 | |
Los nuevos bloques de salida codificada <%: %> en ASP.NET 4 y MVC 2. ASP.NET, Visual Studio, ASP.NET 2.0, .NET Fuente: weblogs.asp.net Fecha: 07/04/2010 | |
No te pierdas la celebración de Krasis por su décimo aniversario. ¡Felicidades! 1.- Ir a la tienda2.- Meter en el carrito lo que quieras comprar (una unidad de cada cosa máximo)3.- Y a la hora de pagar usar el siguiente cupón de descuento: Fuente: http://www.jasoft.org/ Fecha: 07/04/2010 | |
Uso de CopyModel (MVC Futures) para copiar valores de propiedades entre objetos de forma automática. Brad Wilson just mentioned that the MVC Futures library has a static ModelCopier class with a CopyModel(object from, object to) static method. It uses reflection to match properties with the same name and compatible types. Fuente: weblogs.asp.net Fecha: 06/04/2010 | |
Propiedades automáticas, inicialización de colecciones y continuador implícito de líneas en VB 2010. ASP.NET, Visual Studio, ASP.NET 2.0, .NET Fuente: weblogs.asp.net Fecha: 06/04/2010 | |
Vídeo sobre MVC 2 avanzado, de Brad Wilson. Muy interesante. My re-recorded Advanced ASP.NET MVC 2 video is available now. The original video, from my C4MVC presentation, turned out to have a combination of bad audio and bad video, most of which I take the blame for, so I re-recorded... Fuente: bradwilson.typepad.com Fecha: 05/04/2010 | |
Parámetros opcionales y con nombre en C#, y su uso en acciones MVC ASP.NET, Visual Studio, ASP.NET 2.0, .NET Fuente: weblogs.asp.net Fecha: 05/04/2010 | |
Tras once años de desarrollo, ayer fue lanzado OpenSSL 1.0. Here you can find hints to the regular news about the OpenSSL project. Check this table from time to time when you want to be up-to-date with the latest OpenSSL development. Fuente: http://www.openssl.org/ Fecha: 30/03/2010 | |
Activar/Desactivar el copiado y pegado de líneas en blanco en Visual Studio 2010. As you may know, Visual Studio’s cut and copy commands are useful for more than just selected text. If you invoke them when there is no selection, VS will cut or copy your entire line, which saves you the trouble of selecting the line before adding it Fuente: blogs.msdn.com Fecha: 29/03/2010 | |
Diferencias entre First() y Single() en LINQ. .NET, Software Architecture Fuente: weblogs.asp.net Fecha: 29/03/2010 | |
Hanselman comenta las mejoras en el tiempo de arranque de aplicaciones ASP.NET 4. Scott Hanselman on Programming, User Experience, The Zen of Computers and Life in General Fuente: http://www.hanselman.com/ Fecha: 29/03/2010 | |
Implementando un captcha en un ActionResult, parte I. Fuente: dotnetslackers.com Fecha: 29/03/2010 | |
Lanzado jQuery UI 1.8. jQuery UI is jQuery's user interface library that comes with many widgets, interaction modules and themes. Fuente: blog.jqueryui.com Fecha: 26/03/2010 | |
Algunos casos de éxito de ASP.NET MVC. Shiju Varghese's Blog on ASP.NET MVC Fuente: weblogs.asp.net Fecha: 26/03/2010 | |
Convergencia VB y C# en las últimas versiones de los lenguajes C# 3 had new language extensions that are practical for every kind of application. No matter what application you’re creating, property initializers, collection initializers, Lambda expressions, LINQ… ... Fuente: weblogs.thinktecture.com Fecha: 25/03/2010 | |
Mejoras en controles de datos disponibles en ASP.NET 4. This article, by Scott Mitchell, explores the enhancements made to the data Web controls in ASP.NET 4.0. Fuente: http://www.4guysfromrolla.com/ Fecha: 25/03/2010 | |
Facilitar el diagnóstico de problemas con ASP.NET MVC: unautilidad para mostrar información de entorno, versiones de ensamblados MVC, Futures, y algunas cosas más. When we released ASP.NET MVC 2, we included a file in the MvcFutures package (download) called MvcDiagnostics.aspx. This single WebForms page can be dropped into any MVC site, and then viewed in your browser. It will give you diagnostic information... Fuente: bradwilson.typepad.com Fecha: 25/03/2010 | |
Uso de desplegables en ASP.NET MVC, partiendo de cero. DropDownLists in ASP.NET MVC seem to cause a fair amount of confusion to developers fresh from Web Forms World. This article looks to provide you with all (well, most) of what you need to know to get your DropDownLists working in ASP.NET MVC. Fuente: http://www.mikesdotnetting.com/ Fecha: 24/03/2010 |
Y no olvides que, si te interesa, puedes seguir esta información en vivo y en directo desde Variable not found en Facebook, o siguiéndome en Twitter.
Publicado en: Variable not found
Además de en la página del blog en la red social, como por arte de magia, estos enlaces se difunden simultáneamente desde mi perfil personal de Facebook y a través de Twitter. Sin embargo, desde hace tiempo estaba estudiando la posibilidad de recopilar a su vez toda esta información para poder publicarla en el blog, cerrando completamente el círculo.
Aprovechando un huequito he creado una pequeña aplicación que toma esos enlaces y los maqueta de forma automática para mostrarlos en Variable not found. Así, a la vez que hago llegar estos enlaces a los suscriptores y lectores ocasionales del blog, los almaceno agrupados en una única ubicación sobre la que es posible realizar búsquedas, que es más cómodo que tomar rabos de pasas ;-)
En un principio orienté la solución utilizando el SDK de Facebook (como introducción os recomiendo leer esta magnífica serie del amigo Eduard Tomás), pero estaba intentando matar mosquitos a cañonazos: demasiada complejidad para una necesidad tan simple.
Afortunadamente, me di cuenta de que esta información está disponible en formato ATOM y RSS, por lo que en principio puede ser consumida utilizando las clases de sindicación introducidas con .NET 3.5 en el espacio de nombres
System.ServiceModel.Syndication
del ensamblado System.ServiceModel.Web
. Por tanto, debería bastar con obtener las feeds, por ejemplo en formato ATOM, desde la dirección del feed http://www.facebook.com/feeds/page.php?format=atom10&id=94490426991, ¿no?
XmlException: Por razones de seguridad DTD está prohibido en este documento…
Pero claro, las cosas nunca son tan sencillas como se prevé en un principio. Utilizando contra los feeds de Facebook el código convencional para acceder a este tipo de información (y que de hecho funciona con muchos otros feeds), se lanzaba una excepción con un misterioso mensaje:XmlReader reader = XmlReader.Create(feedURL);
SyndicationFeed feed = SyndicationFeed.Load(reader);
// Excepción XmlLException ^^^^
// "Por razones de seguridad DTD está prohibido en este documento XML.
// Para habilitar el procesamiento DTD establezca la propiedad ProhibitDtd
// en XmlReaderSettings como false y pásela al método XmlReader.Create."
Gracias a la inestimable colaboración del compañero Fiddler, pude averiguar que el problema se debía a que Facebook no estaba retornando la información en el formato solicitado (en este caso, ATOM), sino HTML:
Si observáis, la petición inicial es redirigida a un nuevo recurso mediante un código de respuesta 302, una página web en cuyo título podemos observar el texto “Navegador incompatible”.
El motivo es que, obviamente, la petición realizada automáticamente por
XmlReader
para obtener los datos no incluye información sobre el navegador utilizado, Facebook detecta esta circunstancia y nos devuelve una página como la siguiente:Y esa es precisamente la causa de la excepción: los datos retornados no se encuentran en el formato esperado.
Para cambiar esto es necesario modificar ligeramente el código anterior, creando de forma manual la petición HTTP e inyectándole en el encabezado User-Agent un valor reconocible por los servidores de Facebook, como “Mozilla/4.0”, el empleado por IE8.
Para crear el objeto
XmlReader
utilizamos otra sobrecarga, de forma que le suministramos el Stream
de respuesta de la conexión que hemos creado:HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(feedURL);
wr.UserAgent = "Mozilla/4.0";
XmlReader reader = XmlReader.Create(
wr.GetResponse().GetResponseStream()
);
SyndicationFeed feed = SyndicationFeed.Load(reader);
foreach (var item in feed.Items)
{
// Procesar entrada...
}
De esta forma, podemos acceder a feeds, incluso a los de Facebook, para obtener información y procesarla a nuestro antojo.
En el caso de mi megasuperaplicación, simplemente he tenido que parsear un poco el contenido y generar marcado HTML para cada entrada del feed con objeto de conseguir algo parecido a lo siguiente:
Publicado en: Variable Not Found.
Hey, ¡estoy en Twitter!
Publicado por José M. Aguilar a las 11:41 p. m.
Etiquetas: blogging, enlaces, redes sociales, variablenotfound, variablenotfound.com
MVC 2 también permite habilitar esta característica en Visual Studio de forma muy sencilla. Sólo seguir los pasos descritos a continuación.
En primer lugar, con el botón derecho del ratón sobre el proyecto MVC 2, selecciona la opción “Descargar proyecto”:
A continuación, de nuevo con el botón derecho sobre el proyecto, seleccionamos la opción “Editar NombreProyecto.csproj” (o .vbproj, dependiendo del lenguaje utilizado):
Con estas operaciones hemos conseguido traer al editor de Visual Studio el archivo de definición del proyecto, en el que debemos buscar el siguiente texto que deshabilita expresamente la compilación de vistas:
<PropertyGroup>
...
<MvcBuildViews>false</MvcBuildViews>
</PropertyGroup>
Y efectivamente, el único cambio a realizar sería sustituir “false” por “true” :-). Salvando el archivo y volviendo a cargar el proyecto, habremos conseguido lo que pretendíamos.
Publicado en: Variable not found
Hey, ¡estoy en twitter!
Recientemente se ha publicado la tercera versión de NDepend, que ofrece interesantes novedades respecto a las anteriores, como la integración absoluta con Visual Studio, el soporte para soluciones multi-proyecto, potentes mecanismos de búsqueda, edición múltiple de CQL, o el seguimiento de cambios, además de las tradicionales características del producto.
Para habilitar esta característica es necesario instalar el plugin en el IDE, que se realiza desde el propio entorno visual de NDepend:
De esta forma, ya no es necesario acudir a la herramienta Visual NDepend para realizar búsquedas, comprobar reglas o navegar a través de la base de código: lo haremos directamente desde VS, utilizando los menús contextuales. Y gracias a ello, podemos disfrutar de las nuevas opciones de navegación, que nos permitirá surcar el código utilizando rutas distintas a las habituales:
Además, como comenta Patrick Smacchia, padre de la criatura, el rendimiento del entorno prácticamente no se resiente, dado que los análisis se ejecutan en segundo plano de forma incremental.
Recordar, por último, que NDepend es una aplicación comercial, pero dispone de una versión limitada gratuita utilizable por universidades, desarrolladores open source e incluso, durante un tiempo determinado, de prueba en proyectos comerciales.
Página del producto: http://www.ndepend.com/
Publicado en: Variable not found
Hey, ¡estoy en twitter!
Publicado por José M. Aguilar a las 11:49 p. m.
Etiquetas: .net, buenas prácticas, calidad, desarrollo, herramientas