2010-10-13 11 views
8

In MVC 3 Beta, gibt es einen Unterschied zwischen den Vorlagen MVC 3 Partial Page (Razor) und MVC 3 View Page mit Layout (Razor)?Unterschied zwischen MVC 3 Partial Page (Razor) und MVC 3 Ansichtsseite mit Layout (Razor)?

Ich habe eine Teilseite (_partialList) zu meiner Anwendung hinzugefügt. Jetzt, wenn ich nur die Teilansicht zurückgebe, wendet es das Layout an, das in _ViewStart.cshtml vorhanden ist - es verhält sich sehr ähnlich wie eine Standard-Ansichtsseite mit Layout.

if (Request.IsAjaxRequest()) 
     return View("_partialList", someModelData); 

Wie unterscheidet sich eine "teilweise" Seite von einer Standardansichtsseite mit Layout? Werden sich die beiden in einem bestimmten Szenario anders verhalten?

Antwort

9

Darin's response löst Ihr praktisches Problem der nicht will, um das Layout angewandt werden.

In Bezug auf den Unterschied zwischen den beiden sind sie in Razor praktisch identisch, da sowohl ganze Seiten als auch Teilseiten die gleiche Erweiterung und die gleiche Basisklasse haben.

Der Grund, warum es eine andere Benutzeroberfläche gibt, liegt darin, dass in der Web Forms-Ansichts-Engine beide mit unterschiedlichen Erweiterungen und unterschiedlichen Basisklassen implementiert sind, weshalb separate Vorlagen erforderlich sind.

+0

Ich verstehe die Web-Formulare Teil davon, z. B. Seite und Benutzerkontrolle - zwei verschiedene Konzepte. Aber ich fürchte, ich verstehe nicht ganz, was die Web Form View Engine für Rasiermesser bedeutet. – Preets

+0

@Preets Die WebForms-Ansichts-Engine hat zur Laufzeit keine Auswirkungen auf Razor. Die Visual Studio-Werkzeuge (das Dialogfeld "Ansicht hinzufügen") unterstützen jedoch beide Ansichtsmaschinen und erfordern daher, dass Razor mit zwei Optionen geliefert wird, obwohl sie derzeit funktional gleichwertig sind. – marcind

+0

danke :) Ich hätte das nie herausgefunden! – Preets

0

Ich glaube nicht, dass es einen Unterschied gibt.

+0

Irgendeine Idee, warum sie existieren? – Preets

10

Wenn Sie nicht wollen, das Layout zurückgeben PartialView statt View anzuwenden:

if (Request.IsAjaxRequest()) 
    return PartialView("_partialList", someModelData); 
+0

Danke, das war mir nicht bewusst. – Preets

+0

Aber ich bin mir immer noch nicht sicher, warum zwei Vorlagen existieren, wenn sie im Grunde das gleiche tun (d. H. Die Teilansicht/Seite mit Layout)? – Preets

2

Ansichten haben diese @ { View.Title = "Index"; Layout = "~/Ansichten/Shared/_Layout.cshtml"; }

und Teilansichten nicht

+0

View.Title DNE. – xanadont

3

den folgenden Code zu Ihrer Seite hinzufügen und die Ansicht Motor das Layout nicht gelten.

@{ 
    Layout = null; 
}