2012-03-21 15 views

Odpowiedz

12

Chociaż można zastąpić układ z kontrolerem jak sugerowano w innej odpowiedzi, moim zdaniem oznacza to, że regulatory są coraz prostu zbyt udział w określaniu, co będzie UI. Najlepiej pozostawić to wyłącznie w Widoku, aby zdecydować.

Najbliżej co pytasz jest to zrobić w bieżącym "~/Views/_ViewStart.cshtml":

@{ 
    if(Context.Request.Path.StartsWith("/External", StringComparison.OrdinalIgnoreCase)) 
    Layout = "~/Views/_ExternalLayout.cshtml"; 
    else 
    Layout = "~/Views/_Layout.cshtml"; 
} 

Gdzie "~/Views/_ExternalLayout.cshtml" jest Twój alternatywny układ.

Może chcesz sprawdzić, czy prowadzący "/" jest tam poprawny, nie pamiętam, czy tak jest.

Jeśli wstawisz to do istniejącego _ViewStart, to każdy widok, który jest renderowany w odpowiedzi na adres URL zaczynający się od "/External", użyje tego nowego układu, w przeciwnym razie zostanie użyty "normalny".

Innym podejściem jest użycie tabeli routingu do dodania wartości trasy, której można użyć tutaj w celu podjęcia decyzji o układzie; ale zastosowałem to podejście, aby było to proste.

+0

Mam zamiar użyć tego samego kontrolera PlayerController dla "/ External/View". Czy powinienem w jakiś sposób określić routing? –

+0

@NikitaMartyanov - zmieniłem nieco odpowiedź, ponieważ ponownie używasz tego samego kontrolera, oryginalne rozwiązanie jest świetne dla różnych kontrolerów, ale nie w przypadku ponownego użycia widoków i kontrolerów dla różnych adresów URL. –

+0

Dziękuję, Andras - użyłem tego podejścia (również dodałem trasę, więc "Exteranal/View" jest mapowane na 'PlayerController' –

8

Można określić, który układ powinien być używany podczas zwracania widoku wewnątrz akcji kontrolera "ExternalController".

return View("View", "~/Views/Shared/_AnotherLayout.cshtml") 
+0

dziękuje, bezpieczny dzień: D –

Powiązane problemy