PostBack in Masterpage
-
Hallo.
Ich habe für meine Navigation in einer Intranetseite mehrere LinkButtons und links. Diese habe ich direkt in meiner Masterpage, in dem entsprechenden Content Bereich eingefügt. Also nicht extra eine aspx Seite für die Navigation erzeugt.
Nun ist für mich wichtig zu wissen, ob sie Seite, oder genauer gesagt meine Navigation, eben das erste mal geladen wurde oder nicht.
Meine Frage nun, haben IsPostBack, IsCallBack, etc. bei der Masterpage überhaupt die selbe Wirkung wie bei aspx Seiten?
Wird beim laden einer aspx Seite, die in einem ContentPlaceHolder der Masterpage steht, die Masterpage sozusagen immer komplett neu geladen und kein IsPostBack Ereignis oder so gesetzt?Hoffe man versteht was ich wissen will
Danke.
-
Genau verstehe ich deine Frage nicht, daher nur das:
"Wird beim laden einer aspx Seite, die in einem ContentPlaceHolder der Masterpage steht, die Masterpage sozusagen immer komplett neu geladen"
Ja. Eine Masterpage ist nur zur Designzeit 'übergeordnet', zur Laufzeit nicht.
Es werden ja auch keine Frames oder sowas erzeugt, deshalb muss die Masterpage zwangsläufig neu geladen werden.
-
Ja OK.
Also kann ich eben nicht rausbekommen ob die Masterpage das erste mal aufgerufen wurde, oder es nur ein Postback ist?Vielleicht nochmal zum Verständnis, ich habe LinkButtons und link HTML Tags direkt in meiner Datei "Seite.master".
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %> <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <%-- ...und ein wenig später dann --%> <div id="leftContent"> <h4>Navigation</h4> <asp:LinkButton ID="lbBereiche" runat="server" CssClass="LinkButtonNav" Width="95%" OnClick="Show">Bereiche</asp:LinkButton> <asp:Label ID="lBereiche" runat="server" Visible="False"> <div class="LinkNav"> <br /><a href = "BR.aspx">BR</a><br /> <a href = "B.aspx">B</a><br /><br /> </div> </asp:Label> <%-- und noch mehr solche Elemente --%>
Beim Aufurf der Methode "Show" durch klicken des LinkButton will ich das Label "lBereiche" sichtbar machen. Und das soll auch sichtbar bleiben, auch wenn dann zum Beispiel die Seite "BR.aspx" aufgerufen wird.
Wie könnte man das denn realisieren?
-
Speicher doch einfach in einem Hiddenfield, welche Bereiche geöffnet werden sollen. Also grob:
<asp:hiddenfield id="OpenMenues" value=""> ... private void Show() { if(OpenMenues.values.indexOf("\tlBereiche") < 0) OpenMenues.values += "\tlBereiche"; } ... void OnLoad() { OpenMenues.values tab splitten foreach( string s in gesplitter Liste) { Label l = FindControl(s) as Label; if(l != null) l.Visible = true; } }
-
Hiddenfield kannte ich noch gar nicht. Scheint ein nützliches Element zu sein. Ich probiers mal aus.
Danke.
-
Mach das oder schau dir vielleicht mal das 'Treeview'-Control an.
Das scheint mir doch ziemlich genau das zu sein, was du brauchst.
-
Bin jetzt leider erst zum testen gekommen.
Leider lässt sich mit TreeView das Problem auch nicht komplett lösen. Sobald ich in irgend einem node ein "NavigateUrl" aufrufe, kommt es nämlich wieder zu einem postback und die rootnodes sind standardmäßg wieder eingeklappt.
Ich benutze übrigens nur 2 Ebenen an nodes.
WIe könnte ich das Problem nun lösen? Bei einem Postback scheinen ja auch gespeicherte werte in hiddenfields weg zu sein.