Está en la página 1de 7

Programación II Ing.

Guillermo Rivera

UNIDAD III – DISEÑO DE APLICACIONES WEB UTILIZANDO BASE DE


DATOS Y EL MODELO DE CAPAS CON MVC.
2. Controladores en ASP.NET MVC.

INTRODUCCIÓN.
Los controladores dentro del modelo MVC son responsables de manejar las entradas del usuario, a
menudo haciendo cambios al modelo en respuesta a la entrada del usuario. De esta manera, los
controladores tienen que ver con la esencia de la aplicación, trabajando con datos que llegan y
proporcionando datos hacia la vista relevante.
En el modelo MVC, el URL le dice al mecanismo de ruteo cuál clase controladora instanciar y cuál
método de acción llamar, y proporciona los argumentos requeridos a ese método. El método del
controlador entonces decide cuál vista usar y esa vista entonces genera el HTML.
En lugar de tener una relación directa entre el URL y un archivo en el disco duro del servidor, existe
una relación entre el URL y un método en una clase controladora. ASP.NET MVC implementa la
variante del controlador frontal del modelo MVC y el controlador se ubica frente a todo excepto el
subsistema de ruteo.

NOTA: MVC requiere que el nombre de todos los controladores finalice con el sufijo “Controller”.

El controlador HomeController.
Por defecto, esta carpeta incluye los controladores siguientes:
1. HomeController: responsable de la página de inicio en la raíz del sitio web, así como de las
páginas About (Acerca de) y Contact (Contacto).
2. AccountController: responsable de solicitudes relacionadas con la cuenta, tales como
usuario y registro de cuenta.
El controlador HomeController contiene código similar al mostrado a continuación:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Ejemplo1MVC.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}

1 de 7
Programación II Ing. Guillermo Rivera

public ActionResult About()


{
ViewBag.Message = "Your application description page.";
return View();
}

public ActionResult Contact()


{
ViewBag.Message = "Your contact page.";
return View();
}
}
}

Observe que esta es una clase simple que hereda de la clase base Controller. El método Index() es
responsable de decidir qué sucede cuando navega hacia la página de inicio del sitio web.

Archivo Global.asax Carpeta App_Start

Sin embargo persiste la pregunta “¿Cómo son mapeados los URL hacia los métodos de acción del
controlador?” La respuesta es el ruteo de ASP.NET. Al revisar el archivo Global.asax se tiene el
método RegisterRoutes():
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

2 de 7
Programación II Ing. Guillermo Rivera

namespace Ejemplo1MVC
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}

Observe que contiene un evento llamado Application_Start() que es ejecutado cada vez que inicia
la aplicación. Dentro de este método se tiene una llamada al método RegisterRoutes() de la clase
RouteConfig, que se encuentra definida dentro de la carpeta App_Start.
Haga clic derecho sobre el método RegisterRoutes() y seleccione la opción Go To Definition para
abrir la clase RouteConfig.

NOTA: Puede abrir directamente la clase RouteConfig desde la carpeta App_Start, pero se usa
este método para demostrar la relación entre ellos.

La clase RouteConfig contiene el código siguiente:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Ejemplo1MVC
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
}
}

El código resaltado en amarillo define lo siguiente:


1. Un nombre por defecto (Default).
2. Una estructura para el URL (controlador/acción/parámetro).
3. Valores por defecto para el controlador (Home) y para el método de acción (Index).
Adicionalmente define el parámetro como opcional.

3 de 7
Programación II Ing. Guillermo Rivera

Ejecute nuevamente la aplicación. Como ya sabe, la aplicación invoca exitosamente el método de


acción Index() contenido en el controlador HomeController aunque no sea especificado en el URL.
Modifique el URL para pasar solamente el nombre del controlador. Debería obtener el mismo
resultado.

Para probar el parámetro agregue un valor al final del URL. Debería obtener el mismo resultado.

Si desea manejar el valor enviado en el URL cambie el código del método de acción Index() como se
muestra:
namespace Ejemplo1MVC.Controllers
{
public class HomeController : Controller
{
public string Index(string id)
{
return "id = " + id;
}
...

Ejecute nuevamente la aplicación. Debería obtener lo siguiente:

URL: URL:
http://localhost/Ejemplo1MVC/ http://localhost/Ejemplo1MVC/home/index/10

Ahora modifique el código para enviar otro valor.


namespace Ejemplo1MVC.Controllers
{
public class HomeController : Controller
{
public string Index(string id)
{
return "id = " + id + "<br>nombre = " + Request.QueryString["nombre"];
}
...

4 de 7
Programación II Ing. Guillermo Rivera

Ejecute nuevamente la aplicación. Debería obtener lo siguiente:

URL: URL:
http://localhost/Ejemplo1MVC http://localhost/Ejemplo1MVC/home/index/10?nombre=Ren
/ e

Modifique nuevamente el código como se muestra a continuación.


namespace Ejemplo1MVC.Controllers
{
public class HomeController : Controller
{
public string Index(string id, string nombre)
{
return "id = " + id + "<br>nombre = " + nombre;
}
...

Ejecute nuevamente la aplicación. Debería obtener el mismo resultado.


La instrucción IgnoreRoute del archivo RouteConfig evita que la solicitud para mostrar el archivo
de extensión axd que contiene el rastreo de las instrucciones ejecutadas sea procesada por la línea
siguiente (routes.MapRoute).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Ejemplo1MVC
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
}
}

5 de 7
Programación II Ing. Guillermo Rivera

Para mostrar el archivo de rastreo abra el archivo Web.config y agregue la línea coloreada en
amarillo:
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit
http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
EntityFramework, Version=6.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
requirePermission="false"/>
</configSections>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\aspnet-Ejemplo1MVC-20160928092159.mdf;
Initial Catalog=aspnet-Ejemplo1MVC-20160928092159;Integrated Security=True;
User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<system.web>
<trace enabled="true" pageOutput="false"/>
<authentication mode="None"/>
...

Ejecute nuevamente la aplicación y modifique el URL para enviar un parámetro y el nombre.

URL: URL:
http://localhost/Ejemplo1MVC http://localhost/Ejemplo1MVC/home/index/10?nombre=Ren
/ e

6 de 7
Programación II Ing. Guillermo Rivera

Modifique el URL (http://localhost/Ejemplo1MVC/trace.axd) para mostrar el archivo de rastreo.

Coloque en comentarios la línea IgnoreRoute y ejecute nuevamente la aplicación. Al invocar el


archivo de configuración debería obtener el siguiente mensaje de error:

Esto es así porque la línea siguiente a la línea en comentario no tiene la capacidad para manejar la
petición de mostrar el archivo de configuración.

NOTA: Gran parte de este material ha sido tomado de los videos publicados por Kud Venkat de
Pragim Technologies, Marathalli, Bangalore, India. Puede encontrar los videos originales en la
direción URL siguiente:
http://csharp-video-tutorials.blogspot.com/p/aspnet-mvc-tutorial-for-beginners.html

7 de 7

También podría gustarte