2011-11-19 10 views
9

Mi pregunta en general sobre la canalización de renderizado, he visto el esquema de la tubería ASP.NET MVC y había un paso llamado Ver Motor, entonces, ¿cómo funciona? Quiero saber acerca de estos escenarios:Ciclo de vida de la página Razor en ASP.NET MVC

  • ¿Qué se representa primero, página maestra o vista?
  • Si uso Response.End() en @{} bloque al principio de la página, ¿esta ejecución de página interupt y detiene el procesamiento de la vista?

Respuesta

15

¿Qué se representa en primer lugar, página principal o visión?

La vista. El analizador comienza desde el Diseño y crea una estructura LIFO (último en entrar, primero en salir) volviendo a las vistas secundarias y parciales. Una vez que el LIFO está listo, comienza a aparecer y procesar los elementos. Esto significa que los parciales/vistas más internos se procesarán antes del diseño y el último que se procesará es el propio Diseño.

si uso Response.End() en @ {} bloque al comienzo de la página hace esto ejecución interupt de la página y se detiene hacen de la vista?

El uso de Response.End en cualquier vista hará que se muestre una página completamente en blanco. Nunca lo use en ninguna vista. Response.End básicamente aborta el hilo actual activando un ThreadAbortException que no es algo que desee hacer en sus vistas Razor.

+0

¡oh, gracias esto explica muchas cosas para mí! – Alexander

2

Eche un vistazo a Request-Handling Pipeline Poster de Steve Sanderson. Explica todo el proceso de solicitud bastante en detalle. Es de MVC versión 1.0, pero sigue siendo válido. Simplemente reemplace 'WebForm' con Razor.

Realmente no debería molestarle si el maestro o la vista se representan primero. ¿Podrías explicar por qué esto es importante para ti?

+0

a veces es bueno saber cómo funcionan las cosas, ayuda a entender por qué funciona así y no de otra manera :) – Alexander

+3

Puedo demostrar una razón por la que este conocimiento es bueno. He estado usando cassette para empacar en mi proyecto. Tiene métodos estáticos para "incluir" paquetes de recursos en la página. Un bloque de código como '@ {Bundles.Reference (" ~/bundle/pageScripts "," Head ");}' en una vista secundaria se ejecutará primero y si depende de jquery, que está definido en el diseño, el código del diseño se ejecutará después de las vistas secundarias, lo que dará como resultado un orden incorrecto de los archivos de script. Hay varias maneras de solucionar esto, pero ayuda a saber por qué las llamadas están sucediendo en ese orden. – JonathanTech

+2

El motivo que da @JonathanTech es la razón por la que también necesitaba saber esto: solo estoy usando System.Web.Optimization de MVC4 en lugar de Cassette. La misma idea sin embargo. –

Cuestiones relacionadas