Hello World, con ASP.NET MVC

En estos días, me encuentro estudiando el ejemplo de @jongalloway y su “walkthrough” de ASP.NET MVC 2:

http://mvcmusicstore.codeplex.com/

MVC Music Store is a tutorial application built on ASP.NET MVC 2. It’s a lightweight sample store which sells albums online, demonstrating ASP.NET MVC 2’s productivity features and data access via Entity Framework 4. See what you can do with MVC 2 in under 1000 lines of c# code!

Quisiera tomar en una serie de post, un camino similar (tal vez cambiando la base, con otro tema, veremos), para ir viendo algunos elementos iniciales de esto que es ASP.NET MVC (sigla que viene de Model View Controller, enlaces al final del post).

El ejemplo lo pueden seguir con Visual Studio 2008, con los bits de ASP.NET MVC 2 instalados (el ASP.NET MVC 3 Review 1, es para .NET 4 y VS 2010). Este es mi primer ejemplo de Visual Studio 2010. Creamos un proyecto web, ASP.NET MVC 2 vacío (vean que hay otras opciones). Lo llamo MvcHelloWorld:

Esta es la estructura de la solución creada:

Vemos que hay directorios como Controllers, Models, Views, que no aparecían en un proyecto ASP.NET inicial. Tenemos que ir estudiando qué es eso de Controller, Model, View. Por ahora, no hay modelo ni controller.

Pero podemos “espiar” un poco el código del global.asax:

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
        }
    }


En el método Application_Start se registra el tratamiento de los pedidos. Vamos a ver que lo que programamos, ya no lo invocamos por página .aspx como en



http://localhost:1045/StoreList.aspx



sino que invocaremos:



http://localhost:1045/Store



Donde “Store” es el nombre de un controlador: una clase que se ocupará de las acciones que pedimos. El código del global.asax indica que “Home” es el controlador asumido, y que la action asumida es “Index”. Pero para entenderlo mejor, veamos de agregar un controller:



ASP.NET MVC está basado en “convención sobre configuración”: toma algunas reglas convencionales sobre cómo ubicar un controller o una vista. Sobre el directorio Controllers, presionamos botón derecho del mouse y agregamos un controller:





De nuevo, por convención, el controlador Home se llama HomeController:





(No usamos por ahora, el check de “Add action methods…”)



Queda una clase HomeController, con un método Index:



    public class HomeController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            return View();
        }
    }


No sabemos qué es un ActionResult o lo que retorna el método View() (vean que no es un new View(), es un método de Controller). Para nuestro ejercicio, lo cambiamos a:



        //
        // GET: /Home/
        public string Index()
        {
            return "Hello, MVC World";
        }


Ahora el método retorna un string. Si ejectuamos la aplicación





Notemos que no se pidió una página, ni siquiera Default.aspx. Pero el ruteo definido actuó tomando a “Home” como controlador asumido, y a “Index” como acción asumida. Prueben pedir:



http://localhost:12864/Home
http://localhost:12864/Home/Index



y obtenemos lo mismo.



Tenemos que ver, en próximos ejemplos, qué es modelo, vista, y otras opciones de controller.



Pueden bajar el ejemplo, si lo necesitan, desde MvcHelloWorld.zip.



Mis enlaces sobre el tema en:



http://delicious.com/ajlopez/aspnetmvc



Algo más sobre el patrón en Model View Controller en



http://delicious.com/ajlopez/mvc



Nos leemos!



Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 13362, 1389, 5374. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>