2009-07-25 12 views
5

¿Cómo es que puedo crear un método en el controlador y poner algunos argumentos y resolverlo luego de hacer clic en el envío de un formulario? Bajo el capó, ¿cómo encuentra el método correcto y cómo se da cuenta de que solo quiero esos argumentos?¿Cómo lo soluciona asp.net mvc?

Respuesta

8

En pocas palabras:

  1. El motor de enrutamiento se encarga de la HttpRequest, y se comprueba la dirección URL solicitada. Cuando encuentra la primera coincidencia de ruta, crea una nueva instancia de MvcRouteHandler y le pasa los tokens fragmentados de la URL en un RouteValueDictionary.

  2. La ruta MvcRouteHandler toma la solicitud e intenta crear una instancia de clase de controlador. Por convención, busca una clase llamada "XXXXXXController", donde las X se reemplazan por el parámetro {controller} en la ruta.

  3. Una vez que encuentra el controlador, invoca el método apropiado en él, dado por el parámetro {acción} de la ruta. Cualquier argumento con nombre, como {id}, que exista en la ruta, se pasa como parámetros al método.

Básicamente, todo lo que ASP.Net MVC "conoce" proviene de la información de la ruta. No puede adivinar los parámetros desde el aire: deben provenir del análisis de la ruta. Si la información no está presente en la URL solicitada, no se puede pasar al método.

También se debe tener en cuenta que puede anular el comportamiento del marco haciendo que las rutas utilicen controladores alternativos en lugar de MvcRouteHandler. El marco es bastante extensible, por lo que puede conectar funcionalidad personalizada en muchos puntos.

+0

De la ruta o la colección del campo de formulario. – GalacticCowboy

+0

La colección de campos de formulario viene junto con la solicitud, pero no afecta cómo ASP.Net MVC lo resuelve. El formulario se publica en una URL determinada (por lo general, en el mismo controlador que generó la vista) y el motor de enrutamiento maneja esa URL. – womp

1

Hay un poco de código en juego para el controlador, la acción y la resolución de la vista, así como los ModelBinders. Tanto que probablemente sea mejor para usted buscar partes específicas del marco y hacer una pregunta más detallada para obtener una buena respuesta.

Afortunadamente, el ASP.NET MVC framework has been open-sourced, por lo que si tiene curiosidad sobre cómo funciona todo, puede get the code y revisarlo usted mismo. Es un código excelente para leer y seguramente aprenderá algo.

Más al punto de su pregunta, sin embargo, debe consultar las clases System.Web.Mvc.MvcHandler y System.Web.Mvc.ControllerActionInvoker, que deben guiarlo por el camino correcto para responder sus preguntas.