2010-11-17 55 views
27

El método View() puede cargar vistas parciales.Vista() frente a Vista parcial()

es la diferencia entre View() y PartialView()View() es que puede cargar puntos de vista y vistas parciales y sólo se puede cargar PartialView() vistas parciales?

+24

es este un trabalenguas? – Lorenzo

Respuesta

35

Depende de un motor de vista para decidir si quieren tratar vistas parciales diferentes de las vistas normales.

Por ejemplo, en WebFormViewEngine no hay diferencia.

En el nuevo ASP.NET MVC 3 RazorViewEngine existen algunas diferencias. Solo las vistas regulares tendrán las páginas "_viewstart.cshtml" ejecutándose porque están pensadas para cosas como la configuración de páginas de diseño.

+0

Asistencia de compatibilidad y diseño de Viewstart (por separado) más diferencias de excepción menores: http://completedevelopment.blogspot.com/2014/01/is-there-really-no-difference-between.html –

+0

Además, creo 'PartialView() 'buscará las ubicaciones de vistas que se especifican en la propiedad PartialViewLocationFormats de su ViewEngine y' View() 'usará la propiedad' ViewLocationFormats'. –

+0

@MaksimVi. eso es correcto, excepto que en los motores de vista por defecto de MVC las ubicaciones son todas idénticas entre vistas parciales y vistas "normales". Pero si los configuró de manera diferente o si usa un motor de vista diferente, sin duda podrían ser diferentes. – Eilon

3

Si tiene Index.aspx y Index.ascx para el mismo controlador que tiene ambos métodos puede ayudar a desambiguar. Pero estoy de acuerdo en que en general View es más comúnmente utilizado. Y PartialView también se puede usar para cargar vistas completas, solo que es semánticamente incorrecto.

+1

Estoy bastante seguro de que WebFormViewEngine utiliza exactamente las mismas extensiones de archivo para vistas regulares y vistas parciales, por lo que probablemente no lo ayuden a desambiguar. – Eilon

+0

Eilon es incorrecto. Las vistas parciales son .ascx y las vistas son .aspx – Chev

+1

@Chevex Si observa las colecciones 'ViewLocationFormats' y' PartialViewLocationFormats' de WebFormViewEngine, verá que son idénticas. Si bien el objetivo es usar .aspx para vistas completas y .ascx para vistas parciales, el motor de vista las trata de la misma manera. – marcind

16

Creo que la mayor diferencia es sobre el uso de la página _Layout:

  • PartialView(): el motor de la maquinilla de afeitar obtendrá la vista (por ejemplo index.cshtml) sin ningún tipo de diseño de página (_layout. cshtml).
  • Ver(): el motor va a obtener su punto de vista (por ejemplo index.cshtml) y después se añade el contenido de este punto de vista dentro de la página de diseño (_layout.cshtml)
+1

+1 porque esto es IMO realmente el hecho más importante! Intenta usar, p. '@ Html.Action (" SideMenu "," Menú ")' de esta manera: 'public ActionResult SideMenu() {return View(); } ' Se preguntará por qué es renderend en '_Layout' con' RenderBody() '. Devuelve 'PartialView()' en su lugar porque no se representa mediante 'RenderBody()' a '_Layout'. – dee

Cuestiones relacionadas