¡Herramientas de ASP.NET MVC 3 actualizadas!

Por si no lo sabéis, en estos días se está celebrando el MIX11. En el MIX11 se celebran más de 100 charlas, casi una decena de Bootcamps y por supuesto los Keynotes donde los grandes nombres presentan lo nuevo del mundillo.

En este post vamos a hablar sobre una de esas cosas nuevas, en concreto de la actualización de las herramientas de ASP.NET MVC 3. Las podéis bajar de aquí.

¿Qué trae de nuevo? Vamos paso por paso.

Vamos a Visual Studio y le damos a crear una nueva ASP.NET MVC 3 Web Application


Como véis, tenemos una nueva opción, Intranet Application. Como su nombre indica, este tipo de aplicaciones están pensadas para funcionar en intranet, así que el sistema de autentificación será Windows Authentication en vez de Forms Authentication (Por lo cual se quitará el AccountController). Por lo demás es igual a Internet Application.

Si os seguís fijando, ahora ASP.NET MVC 3, tiene soporte HTML 5, lo cual es muy interesante. Vamos a crear una Internet Application con la opción de HTML 5 marcada.

Si váis al archivo _Layout.cshtml os podréis fijar que está usando los nuevos tags de HTML 5. Y no solo eso, además ahora las nuevas herramientas trae por defecto Modernizr que para quien no lo sepa es una librería en javascript que nos ayuda a usar las nuevas tecnologías como HTML 5 y CSS 3 a la vez que mantenemos compatibilidad con navegadores más antiguos.

Aparte de Modernizr, ahora disponemos de Jquery 1.5 y no es eso lo más interesante, ahora estas librerías vienen como paquetes de NuGet lo que significa que cuando salga por ejemplo una nueva versión de jQuery o Modernizr, se actualizará en nuestra aplicación usando NuGet los que nos ahorra de quebraderos de cabeza (aunque por lado negativo, no actualiza las referencias en el Layout, aunque era previsible).

Ahora ASP.NET MVC 3 trae por defecto Entity Framework 4.1 lo cual nos ahorra un poco de tiempo :P

¿Ejecutamos la aplicación? Venga:

¡Ahora el Layout usa HTML5! Bordes redondeados, título con sombra… mooola :)

Ahora vamos con la última actualización, scaffolding. ¿Qué es eso? Scaffolding sirve para generar código que nos permita crear, leer, actualizar y borrar entradas en una base de datos, vaya, nos genera código CRUD. Quizás te hayas dado cuenta que ya podíamos generar código para una de estas cosas cuando creabamos una vista, pero ahora podemos generar directamente un controlador con el código necesario para hacer todas estas cosas con sus respectivas vistas y todo.

¿Vemos como funciona esta mágia? :)

Vamos a crear una clase, algo simple:

namespace MVC3Update.Models
{
    public class Persona
    {
        public int ID { get; set; }
        public string Nombre { get; set; }
        public int Edad { get; set; }
        public string Email { get; set; }
    }
}

Aquí la tan socorrida clase persona :P

¿Qué vamos a usar de base de datos? ¿SQL Server CE 4? Pues vamos a instalarlo con NuGet:

PM> install-package EntityFramework.SqlServerCompact

Compilamos la aplicación y vamos ahora con el controlador:

Uh uh, opciones nuevas. Aquí le decimos que queremos un controlador con las acciones para leer/escribir, sus respectivas vistas y esto usando EntityFramework. Además especificamos la clase con la que trabajará y en la clase para contexto le damos a añadir una nueva, le ponemos PersonasContext y la creará por nosotros.

Antes de ver los detalles, vamos a ejecutar la aplicación y nos vamos al controlador Personas, nos aparecerá el listado:

Clicamos en crear nuevo y nos aparece una vista para crear nueva Persona

Metemos algunos datos, le damos a añadir y ¡Voila!, los datos están añadidos:

¿Una maravilla verdad? Puedes incluso ver que la base de datos se ha creado y tal.

Si le echamos un ojo al controlador, vemos que nos ha creado todo el CRUD y con todo el código necesario para funcionar:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVC3Update.Models;

namespace MVC3Update.Controllers
{
    public class PersonasController : Controller
    {
        private PersonasContext db = new PersonasContext();

        //
        // GET: /Personas/

        public ViewResult Index()
        {
            return View(db.Personas.ToList());
        }

        //
        // GET: /Personas/Details/5

        public ViewResult Details(int id)
        {
            Persona persona = db.Personas.Find(id);
            return View(persona);
        }

        //
        // GET: /Personas/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Personas/Create

        [HttpPost]
        public ActionResult Create(Persona persona)
        {
            if (ModelState.IsValid)
            {
                db.Personas.Add(persona);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(persona);
        }

        //
        // GET: /Personas/Edit/5

        public ActionResult Edit(int id)
        {
            Persona persona = db.Personas.Find(id);
            return View(persona);
        }

        //
        // POST: /Personas/Edit/5

        [HttpPost]
        public ActionResult Edit(Persona persona)
        {
            if (ModelState.IsValid)
            {
                db.Entry(persona).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(persona);
        }

        //
        // GET: /Personas/Delete/5

        public ActionResult Delete(int id)
        {
            Persona persona = db.Personas.Find(id);
            return View(persona);
        }

        //
        // POST: /Personas/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Persona persona = db.Personas.Find(id);
            db.Personas.Remove(persona);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}

No le falta detalle, pero ninguno ninguno.

No solo nos ha generado ese código, también nos ha creado las vistas con el código necesario para trabajar y todo:

Por si fuera poco, podemos instalar algún paquete NuGet para ampliar las posibilidades de scaffolding a la hora de crear un controlador. Por ejemplo, podemos instalar el maravilloso MvcScaffolding que tiene muchísimas más opciones, es personalizable, nos permite crear nuestros propios plugins… Por defecto podemos generar un controlador con CRUD contra un EntityFramework e incluso generar un controlador que usará un repositorio el cual generará también por supuesto. Si trabajamos con NHibernate por ejemplo podremos crear un plugin que genere código contra NHibernate o lo que queramos vaya…

En resumen, la actualización de las herramientas de ASP.NET MVC 3 nos trae:

  • Soporte para crear aplicaciones para intranet
  • La posibilidad de usar HTML5 en nuestras aplicaciones
  • Trae por defecto jQuery 1.5.1 y Modernizr, ambos como paquetes de NuGet
  • El dialogo de crear controlador ha sido ampliado para soportar scaffolding
  • Podemos usar nuestra propia librería de scaffolding en el anteriormente citado diálogo
  • Entity Framework 4.1 incluido de serie

Una simple actualización, y qué de maravillas…

Hasta otra :)

Tags: ,

Dejar un comentario