Angel "Java" Lopez

NET, Java, PHP y Desarrollo de Software

This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

.NET

ASP.NET

Windows Form

VB.NET

C#

Sitios

Blogs

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

Published Wed, Aug 11 2010 10:44 by lopez

Filed under: , ,

Comments

# re: Hello World, con ASP.NET MVC@ Wednesday, August 11, 2010 10:19 AM

Pregunta:

Por qué el controlador hace una tarea del modelo?

return "Hello, MVC World";

En lugar de:

return modelo.getText();

Osorio

# re: Hello World, con ASP.NET MVC@ Wednesday, August 11, 2010 12:01 PM

Hola Osorio!

Bien, porque es un ejemplo. Ves que no explique que es vista ni modelo, apenas explique como se llega al controlador. Sigo el ejemplo de @jongalloway, por ahora, donde el tambien lo hace asi.

Supongo que con el mismo afan que yo: mostrar una cosa por vez, ir incrementando poco a poco el conocimiento de MVC para quien nunca lo vio.

Ah! Tenes algo publicado de tu experiencia en Erlang?

Nos leemos!

Angel "Java" Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

lopez

# re: Hello World, con ASP.NET MVC@ Thursday, August 12, 2010 4:27 PM

Angel,

No tenía nada sobre Erlang, pero acabo de terminar algo impulsado por tu pregunta:

gescript.blogspot.com/.../parabola-del-actor-y-el-objeto.html

Espero no defraudar.

Osorio

Osorio

# Pregunta acerca de MVC 2@ Thursday, January 13, 2011 11:29 AM

Hola, acabo de encontrarme con este post y resulta que tengo la misma inquietud que el comentario de arriba.

También estoy siguiendo el ejemplo de MusicStore MVC 2 y hay una cosa que me choca y es que las instrucciones que añaden por ejemplo un Album a la base de datos están en el propio controlador (usa LINQ). Es decir que en lugar de crear una clase AlbumDAO que reciba los datos y haga las consultas contra la base de datos las hace directamente desde el controlador.

Las lineas en concreto son:

storeDB.AddToAlbums(album);

storeDB.SaveChanges();

de StoreManagerController.cs

Yo creo que no es correcto esto pero me gustaría saber su punto de vista.

Como sería la forma correcta de acceder a la base de datos entonces ?

Creando una clase como AlbumDAO por ejemplo y un método crearAlbum que hiciera esas instrucciones?

Muchas gracias por su tiempo

Carlos

# re: Hello World, con ASP.NET MVC@ Sunday, January 16, 2011 8:26 AM

Hola gente!

Carlos: supongo que la idea de Jon Galloway es ir paso a paso. Quiere concentrarse en lo que hay en ASP.NET MVC, y no quiere agregar mas de una cosa a la vez.

No se si estan publicados los WebCamps (presentaciones, ejercicios, demos.. ) de ASP.NET MVC. Pero ahi hay ejemplos donde luego al controlador se le inyecta una clase de servicio que se ocupa de buscar lo que necesita del modelo.

Nos leemos!

Angel "Java" Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

lopez

Leave a Comment

(required) 
(required) 
(optional)
(required) 
If you can't read this number refresh your screen
Enter the numbers above: