2012-11-10 12 views
18

Zaczynam uczyć się MVC4. Natrafiłem na dwie możliwości stworzenia widoku opartego na szablonie maszynki lub stronie wzorcowej.Układ MVC VS MVC Master Strona

Chciałbym zrozumieć praktyczne różnice między dwoma.

Na razie widzę, że jeśli utworzę widok za pomocą strony wzorcowej, mogę przesłonić kilka sekcji. Na przykład, jeśli mój Mistrz definiuje symbol zastępczy "lewa kolumna" i symbol zastępczy "ciało", mogę nie tylko zdefiniować treść dla określonego widoku, ale mogę również renderować zawartość w sekcji "lewa kolumna", na przykład, aby wyświetlić kontrolki, które są powiązane z kontekstem, w którym znajduje się strona (z pola wyszukiwania do przeglądarki cen akcji). Ponadto stron wzorcowych nie można zdefiniować za pomocą szablonów Razor, które są znacznie mniej szczegółowe niż inne składnie (częściowo błędne: someone udało się zhakować ten aspekt).

z brzytwa układów, mogę tylko określić jeden ciągłego bloku strony, które mogą być zastąpione przez konkretnego View, a ja powinienem korzystać z wielu układów (łamanie suchy) dla małych zmian w innych częściach strony. Czy moje poprzednie stwierdzenie jest poprawne lub czy czegoś brakuje?

Oczywiście mogę renderowania zawartości w dowolnej części strony poprzez właściwe wykorzystanie jQuery, ale to już inna sprawa

+1

W układzie maszynowym można definiować wiele "sekcji".Powinieneś przeczytać ten artykuł o tym, jak [układy i sekcje] (http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor .aspx) działa w maszynie Razor. – nemesv

Odpowiedz

26

Można użyć sekcje z maszynki. Scott Gu blogu o nich tutaj: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

w układzie można określić jak wiele sekcji, jak chcesz:

<div id="leftMenu"> 
    @RenderSection("LeftMenu", required: false) 
</div> 

który mógłby zastąpić w widokach:

@section LeftMenu { 
    <div>... here comes the left menu for this view ...</div> 
} 

Można też sprawdzić, czy sekcja została zdefiniowana w widoku i jeśli nie zawiera pewnej domyślnej treści:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu") 
} 
else { 
    <div>Some default left menu</div> 
} 
11

Zaczynając od MVC3, wprowadzono maszynę do golenia. Na wysokim poziomie silnik widoku jest w zasadzie tym, co zabiera widok i renderuje potrzebny HTML. Razor używa pliku _layout i własnego systemu szablonów podobnego do stron wzorcowych. Jednak MVC3 i 4 mają inny mechanizm wyświetlania nazywany mechanizmem wyświetlania WebForms i ten używa stron wzorcowych. Jeśli spojrzysz na stare samouczki MVC1 i MVC2, zobaczysz strony wzorcowe, ponieważ przed MVC3 był tylko silnik widoku WebForms.

Teraz pod względem funkcjonalności oba są podobne. Strony wzorcowe umożliwiają definiowanie uchwytów zawartości, podczas gdy maszynki do golenia pozwalają definiować sekcje. Główna różnica polega na renderowaniu strony. Strony wzorcowe renderują stronę na zewnątrz, tzn. Najpierw stronę wzorcową, a następnie miejsce przechowywania zawartości. Razor jest przekonany, że jest rekursywny i zaczyna się od najgłębszej części i działa z powrotem.

Sprawdź ten wpis na blogu, aby uzyskać więcej informacji na temat układów brzytwa http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

Pod względem których korzystne jest jeden, oba silniki widok istnieją, ale jeśli chcesz ulitize się sytax ostrzami (co bardzo polecam) wtedy musisz użyć układu układu. Maszynka do golenia nie pozwala na używanie stron wzorcowych.

+2

Dziękuję za szczegółową odpowiedź. – RayLoveless