El secreto del framework MVC 4 en ASP. Red: Controlador (1)
Sabemos que, como tipo de controlador, la interfaz Web Mvc IController del sistema se implementa directa o indirectamente. Como se muestra en el siguiente fragmento de código, la interfaz IController contiene solo un método Execute con un tipo de parámetro RequestContext. Cuando se activa un objeto controlador, su operación principal es incluir. Obtener el nombre de la Acción de los datos de enrutamiento del contexto de solicitud actual y analizar el método correspondiente extraerá los datos correspondientes del contexto de solicitud actual a través del mecanismo de enlace del modelo y llamará al método de Acción para generar la lista de parámetros correspondiente. Todas estas operaciones posteriores se realizan indirectamente llamando al método Execute del controlador.
Controlador de icono de interfaz pública
{
void Ejecutar (contexto de solicitud contexto de solicitud)
}
Ejecutar definido en la interfaz IController se ejecuta de forma sincrónica. Para admitir el procesamiento asincrónico de solicitudes, se define una versión asincrónica de la interfaz IController System Web Mvc IAsyncController. Como se muestra en el siguiente fragmento de código, la ejecución del controlador de interfaz IAsyncController se realiza de forma asincrónica a través de los métodos BeginExecute/EndExecute.
Interfaz pública IAsyncController: IController
{
IAsyncResult comienza a ejecutar (contexto de solicitud contexto de solicitud
Estado del objeto de devolución de llamada de devolución de llamada asincrónica) p>
p>
ejecución final nula (resultado asincrónico IAsyncResult)
}
El sistema de clases abstractas Web Mvc ControllerBase implementa la interfaz IController. Como se muestra en el siguiente fragmento de código, ControllerBase define el método Execute a través de una implementación de interfaz explícita. Este método llama directamente al método virtual Execute protegido internamente, que eventualmente llamará al método abstracto ExecuteCore.
Biblioteca de controlador de clases abstractas públicas: IController
{
//Otros miembros
Ejecución de anulación virtual protegida (RequestContext requestContext) p>
Núcleo de ejecución de vacío abstracto protegido()
ejecución de IController vacío (contexto de solicitud contexto de solicitud)
¿Contexto de controlador público? ControllerContext { get settings;}
diccionario público TempData TempData { get; settings;}
bolsa de vista de objetos públicos {[return:Dynamic]get;}
Diccionario de datos de vista pública ver datos { get settings }
}
ControllerBase tiene las siguientes propiedades importantes: TempData ViewBag y ViewData, utilizados para almacenar datos o variables transferidas desde el controlador al vista . Entre ellos, TempData y ViewData tienen estructuras de datos basadas en diccionarios, y la clave y el valor representan el nombre y el valor de la variable respectivamente. La diferencia entre ellos es que el primero sólo utiliza . Después de almacenar los datos temporales y leer la variable establecida por primera vez, la variable se elimina. En otras palabras, la variable establecida por TempData solo se puede leer una vez. ViewBag y ViewData*** comparten los mismos datos. La diferencia entre ellos es que el primero es un objeto dinámico y podemos asignarle cualquier propiedad (el nombre de la propiedad dinámica será la clave del diccionario de datos).
En ASP NET MVC, encontraremos una serie de objetos de contexto uno tras otro. Antes de esto, se presentó en detalle el contexto de solicitud (HttpContext + RouteData) que representa el contexto de la solicitud. Ahora introduzcamos otro tipo de contexto System Web Mvc ControllerContext que tiene la siguiente definición.
Contexto del controlador de clase pública
{
//Otros miembros
Contexto del controlador público ()
Público Contexto del controlador (RequestContextRequestContext
Controlador base del controlador)
Contexto del controlador público (Contexto HttpContextBase
Route DataRoute Data Controller Controlador básico)
Público Controlador virtual Controlador básico { get settings;}
¿Público? ¿Solicitar contexto? RequestContext { obtener configuración }
¿HttpContextBase virtual pública? HttpContext { get settings }
¿Datos de ruta virtual pública? RouteData { get settings; }
}
Como sugiere el nombre, ControllerContext se basa en el contexto del objeto controlador. Del código anterior, podemos ver que el objeto ControllerContext es en realidad una encapsulación del objeto Controller y RequestContext. Estos dos objetos corresponden respectivamente a las propiedades del mismo nombre en ControllerContext. Al construir ControllerContext, puede inicializarlos especificando los parámetros correspondientes para el constructor llamado.
De forma predeterminada, los objetos HttpContextBase y RouteData devueltos a través de las propiedades httpContextContext y RouteData son en realidad los componentes principales de RequestContext. Cuando se ejecuta el método Execute de ControllerBase, creará un objeto ControllerContext basado en el ReuqestContext entrante, y se puede considerar que las operaciones posteriores se ejecutan en este contexto.
Volver al directorio: Revelando el marco ASP NET MVC
Recomendación del editor
Videotutorial de capacitación sobre desarrollo de ASP NET
Programación del marco Microsoft NET vídeo tutorial
La optimización del rendimiento de los programas Java hace que sus programas Java sean más rápidos y estables.
Lishi Xinzhi/Article/program/net/201311/16100