SPA con Asp.Net Mvc & Angular

Hace tiempo que quería escribir esta entrada pero la vida me ha dado otras prioridades desde que he vuelto a ser padre. Pero después de varias peticiones me gustaría explicar como combino una aplicación Asp.net Mvc con angular intentando aprovechar las ventajas de tener las vistas en el servidor.

El proyecto

Lo primero que he hecho es crear una solución con dos proyectos uno para la interfaz donde estará angular y otra para los servicios de datos, de esta manera queda más clara la separación de estas responsabilidades de la aplicación.

Proyecto

  • Datos: Proyecto Web API
    • Models: en esta carpeta estaría emulando la parte de negocio y las entidades que usaré en los servicios REST. Sigue leyendo
Anuncios

Material MVC & SPA Codemotion 2013

Este año he participado en el gran evento universitario “CodeMotion” que se realiza en Madrid y la experiencia ha sido muy aclaradora.

Sigo viendo los mismos posicionamientos y  clichés que hace diez años en el sector educativo, sin que vean ni de lejos la triste realidad que se encontrarán en cuanto intenten salir al mercado laboral desde esta burbuja idealista.

Las empresas lejos de estos posicionamientos se preocupan más a acrecer como empresa que entrar en esta continua luchas entre fanboys que no aportan nada al negocio.

Seguramente este baño de realidad laboral servirá para distinguir los estudiantes que realmente sienten esta profesión de los que desistirán por el alto grado de entrega que se necesita para destacar en este mundo tan exigente.

Bueno la intención de esta entrada no era dar lecciones paternalista sino publicar la presentación y materiales de la charla.

Espero que mi pequeña experiencia sirva para desmitificar estos temas y que se pueda hablar sin tapujos de la realidad del mercado tecnológico.

Nos vemos en el próximo evento.

Materiales:

Material     streaming

[Truco] ASP.NET MVC & Enums

Hace mucho que no escribía nada en el blog y tengo que empezar a coger otra vez la rutina y nada mejor para eso que comenzar con un truquito para utilizar en nuestros desarrollos en ASP.NET MVC.

Como buen truco no me voy a enrollar demasiado en las explicaciones ni teorías  y me voy a centrar más en el código para que se pueda utilizar de una manera simple.

El Problema

Imaginemos que tenemos un modelo de datos que utiliza una enumeración.

public class Persona
    {
        public int Id { get; set; }
        public string Nombre { get; set; }
        public int Edad { get; set; }
        public Genero Genero { get; set; }
    }
    public enum Genero
    {
        Hombre,
        Mujer,
        Geek
    }

Una vez tenemos nuestra entidad Genero el controlador y las vistas de forma automática con Visual Studio para no entretenerme mucho con el ejemplo. De esta manera ya lo tengo todo preparado con un solo click.

Nuestra vista de inserción tendría esta pinta:

VistaInicial

Como se puede observar la vista se ha creado perfectamente para añadir nuevas personas, pero no se a mapeado correctamente la enumeración para seleccionar el sexo de la persona.

Si lo intentáramos bindar directamente con el modelo tendríamos igualmente el problema porque no sabe mapear la enumeración directamente.

Sigue leyendo

WebApi & oData Queries

Hace unos días Scott Guthrie nos anunció en su blog el lanzamiento de la versión Release de las ASP.NET and Web Tools 2012.2 update disponible para Visual Studio 2012 y .Net framework 4.5

Una de las mejoras que más me ha gustado es el soporte de WebApi al estándar oData, este soporte otorga a nuestro servicio REST la potestad de generar Url’s con consultas semánticas, paginado, operaciones CRUD, etc .

Configuración inicial

Para empezar a jugar con esta poderosa opción primero tenemos que tener el ejemplo base listo:

  • Instalar el web Tools
  • Crear un nuevo proyecto WebApi
  • Que el servicio retorne datos de prueba. En este caso una lista de facturas para las pruebas Sigue leyendo

JavaScript Visual Studio and TDD

La idea de esta entrada es demostrar lo fácil que puede ser trabajar usando TDD con JavaScript desde nuestro Visual Studio como cualquier otro proyecto de test que tengamos en nuestra solución.

Para este ejemplo utilizaré una aplicación ASP.NET MVC con QUnit  el framework de test unitarios que utiliza JQuery y para lanzar los test utilizo directamente Resharper como cuando utilizo otros frameworks como NUnit, MSTest, etc. Debo aclarar que para Visual Studio hay un test runner que lo podéis descargar desde Chutzpah si no tenéis la oportunidad de utilizar Resharper que personalmente me encanta.

Tanto para instalar QUnit como Chutzpah podemos utilizar Nuget desde nuestro proyecto.

TDD

La idea es que necesitamos un Objeto cliente que le podamos especificar diferentes propiedades como puede ser el Nombre, dirección y además añadir sus pedidos.

Test 1

Siguiendo el desarrollo guiado por pruebas, lo primero que tenemos que hacer es una prueba donde intentaremos definir el nombre del cliente. Sigue leyendo

MVC Exportar Datos a .XLS “Excel Files”

Este truco es uno de los top10 en los foros de MSDN y sigue siendo una de aquellas cosas que no es fácil encontrar una documentación clara y adecuada.

Si hablamos desde la perspectiva de ASP.NET MVC esta tarea se nos simplifica muchísimo porque desde nuestro controlador podemos devolver directamente el contenido de un fichero como cualquier otro ActionResult que tengamos configurado. Para eso tenemos el método File que nos proporciona esa funcionalidad y no tenemos que utilizar directamente el objeto Response como nos pasaba con el clásico ASP.NET WebForms.

FileContentResult File(byte[] fileContents, string contentType)
FileContentResult File(byte[] fileContents, string contentType, string fileDownloadName)
FileStreamResult File(Stream fileStream, string contentType)
FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)
FilePathResult File(string fileName, string contentType)
FilePathResult File(string fileName, string contentType, string fileDownloadName)

Para este ejemplo utilizaré la sobrecarga que retorna un FileStreamResult porque lo que queremos hacer es:

Un servicio que recupere los datos de nuestro repositorio, serialice nuestra entidad del dominio en un XML directamente en memoria. Devuelva su contenido especificando que es un fichero Excel y el nombre del fichero que se utilizará para guardar.

Todo esto lo generará dinámicamente en memoria sin tener que tener el fichero Excel físicamente en nuestro servidor. Sigue leyendo

Deserializar JSon a tipo anónimo .Net

En ciertas ocasiones podemos necesitar deserializar un objeto pasado desde un cliente en formato JSon a un tipo .net anónimo. Por ejemplo si utilizas MongoDB con el driver NORM y pretendes filtrar u ordenar de una manera dinámica, es difícil pasar estos objetos a la query para poder generar un filtro dinámico.

Para hacernos una idea esta sería una consulta paginada y  con un filtro sencillo con NORM:

//NoRM anonymous objects:
return GetRepository().GetCollection("Personas")
   .Find(
          new { Nombre = Q.IsNotNull() }, //Where
          new { Fecha = OrderBy.Descending }, //OrderBy
          10, // Nº elementos de la secuencia "Skip"
           0 // Primer elemento de la secuencia "Take"
);

Esta consulta nos devolvería las 10 primeras personas con Nombre que no sea null. Sigue leyendo