- witryna z dwoma stronami wzorcowymi
- użytkownik ma do wyboru, z której strony wzorcowej chce korzystać
- strona zawartości modyfikuje dane w kontrolkach strony wzorcowej
W tym celu należy wykonać następujące kroki:
- Tworzymy projekt MyMasterPage
- Usuwamy Default.aspx - nie jest potrzebna taka strona, według domyślnego szablonu
- Dodajemy stronę wzorcową Add->New Item->Master Page->nazywamy go Main.Master
- Na górze strony dodajemy sobie napis w nagłówku z tytułem strony, oraz jakieś linki jako menu:
<h1>Moja strona</h1> <hr /> <div style="width:auto; clear:both;"> <p>Menu: <a href="~/Default.aspx">Home</a>, <a href="http://www.google.com">Wyszukiwarka</a></p> <hr /> </div>
-
Na dole dodajemy stopkę:
<div style="width:auto; clear:both;"><hr /><p>Footer</p></div>
- Dodajemy stronę zawartości Add->New Item->Web Content Form->nazywamy Default.aspx i wybieramy Main.Master jako strona wzorcowa dla tej strony
- Na stronie dodajemy DopDownList i wypełniamy go elementami Master (o wartości Master.Master) oraz Secondary (o wartości Secondary.Master)
- Dodajemy przycisk "Submit" (ustawiamy mu właściwość UseSubmitBehavior=true)
- Pierwszy test - powinniśmy zobaczyć stronę złożoną ze strony wzorcowej i zawartości
- Dodajemy drugą stronę wzorcową o nazwie Secondary:
- w której nagłówek jest następujący:
<h1>Moja strona</h1> <hr /> <div style="width: 200px; float: left; height: auto;"> <p>Menu: <a href="~/Default.aspx">Home</a>, <a href="http://www.google.com">Wyszukiwarka</a></p> </div>
- stopka jest taka sama jak poprzednio
- a główny ContentPlaceHolder znajduje się wewnątrz obszaru:
<div style="width: auto; float: left;">
- Dla DropDownList'y obsługujemy zdarzenie "SelectedIndexChanged":
- Dla strony Default.aspx obsługujemy zdarzenie "Page_PreInit":
protected void Page_PreInit(object sender, EventArgs e) { if (Session["master"] != null) { MasterPageFile = (string)Session["master"]; } }
- Teraz możemy już przetestować jak działa zmiana szablonu strony wzorcowej po kliknięci na przycisk Submit (uwaga po zmianie trzeba na niego kliknąć dwa razy)
- Teraz dodatkowo jeszcze mały przykład w dostępie do strony wzorcowej z poziomu strony zawartości:
-
Dodajemy etykietę Label do obydwu stron wzorcowych:
<asp:Label ID="Label1" runat="server"></asp:Label>
-
Na stronie zawartości dodajemy TextBox:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
-
obsługujemy zdarzenie Page_Load:
((Label)Master.FindControl("Label1")).Text = this.TextBox1.Text;
- Co w efekcie daje możliwość wyświetlenie w etykiecie znajdującej się na stronie wzorcowej informacji ze strony zawartości.
Session["master"] = this.DropDownList1.SelectedValue;
Na końcu chciałbym dodać, że kod z przykładu dostępny jest tutaj.
zobacz cały materiał:
OdpowiedzUsuń70-562: Dostosowanie i Personalizacja Aplikacji Web [PL]
Bardzo interesująca seria wpisów. :) W punkcie 7, zamiast Master.Master powinno chyba być Main.Master...
OdpowiedzUsuń