2010-08-19 13 views
5

Mam serię zagnieżdżonych stron wzorcowych, tak jak poniżej:ASP.NET MVC stron zagnieżdżone master, dziedziczą treści

site.master:

<asp:ContentPlaceHolder ID="SearchFormContent" runat="server"> 
<%Html.RenderPartial("SearchFormControl"); %> 
</asp:ContentPlaceHolder> 

w zagnieżdżonych (dziecko), obszar strony wzorcowej .master

<asp:Content ContentPlaceHolderID="SearchFormContent" ID="SearchFormContentContainer" runat="server"> 
<asp:ContentPlaceHolderID="SearchFormContent" runat="server"/> 
</asp:ContentPlaceHolder> 

Mam dwie osobne strony z zawartością. Jeden chce dodać własną treść do SearchFormContent, a drugi chciałby zachować zawartość zdefiniowaną na stronie wzorcowej najwyższego poziomu. Oczywiście, ponieważ strona wzorcowa podrzędna definiuje zawartość dla bloku SearchFormContent, dzięki czemu strony podrzędne mogą potencjalnie uzyskać do niej dostęp, zawartość zdefiniowana na stronie wzorcowej najwyższego poziomu jest zatarta.

Jakikolwiek sposób to zrobić?

+0

Próbuję znaleźć rozwiązanie tego samego problemu. w ciągu roku, odkąd pytałeś, czy kiedykolwiek znalazłeś wygodny sposób na zrobienie tego? – Funka

+0

Niezupełnie. Zagnieżdżone rozwiązanie zastępcze działa dobrze, ale jest oczywiście brzydkie. Skończyłem ruch na maszynie do przeglądania Razor, która ma znacznie przyjemniejszy system do opcjonalnego renderowania sekcji strony, zastępowania zawartości tylko wtedy, gdy chcesz, itp. –

Odpowiedz

1

nie mogę wymyślić inny sposób niż posiadające następujące w Twojej strony wzorcowej dziecka

<asp:Content ContentPlaceHolderID="SearchFormContent" ID="SearchFormContentContainer" runat="server"> 
    <asp:ContentPlaceHolder ID="SearchFormContent" runat="server"> 
     <%Html.RenderPartial("SearchFormControl"); %> 
    </asp:ContentPlaceHolder> 
</asp:ContentPlaceHolder> 

Nasty I wiem, ale jest to jedyny sposób, jaki mogę wymyślić podczas używania stron wzorcowych.

HTHS,
Charles

+0

Nie chciałbym tego duplikować w każdym miejscu. Mówimy o kilku stronach. –

+0

Dość kilka stron głównych, które masz na myśli? Ponieważ musisz to zrobić tylko na stronach głównych (podrzędnych). – Charlino

+0

Dwa lata i pełne ponowne wyodrębnienie i migracja do Sitefinity później, tak naprawdę ma sens. –

1

Usuń wszystkie swoje ContentPlaceHolder s i pozostaw SearchFormControl bezpośrednio w witrynie. Jeśli nie chcesz, aby zastąpić SearchFormControl wtedy nie trzeba by zdefiniować ControlPlaceHolder s

+0

Problem polega na tym, że chcę przesłonić zawartość SearchFormControl. Jest renderowany inaczej w kilku różnych obszarach witryny, ale niektóre obszary muszą używać domyślnej treści ze strony wzorcowej witryny najwyższego poziomu. –

+1

@David Lively - Na podstawie twoich dwóch komentarzy brzmi, jakbyś chciał zjeść ciastko i je zjeść. – jfar

1

można umieścić zawartość w ContentPlaceHolder na masterpage. będzie renderowane domyślnie, jeśli nie zastąpisz treści na stronie podrzędnej.

+0

Po dodaniu nowego "Formularza internetowego za pomocą strony wzorcowej" projektant zastąpi wszystkie lokalizacje znalezione na stronie wzorcowej. Czy istnieje sposób, aby powiedzieć, aby nie przesłonić jednego z nich? – Adi

Powiązane problemy