2009-12-14 6 views
1

Dans mon application web (asp.net C#) j'ai des menus comme "Tous", "Education", "Fun", "Comédie". Je veux quand je sélectionne tout alors il devrait être affiché comme menu actuel, pour lequel j'ai un courant de classe CSS.Comment sélectionner le menu actuel dans les pages maîtres?

En cas de WebUserControls je peux le faire facilement par le passage de paramètres de la page en cours pour sélectionner comme ci-dessous:

mywebpage.aspx

<uc:header ID="header1" runat="server" selectedMenu="comedy" /> 

header.ascx (code (C#))

public string selectedMenu 
{ 
    get { return strSelected; } 
    set { strSelected = value; } 
} 

header.ascx (html)

<ul> 
    <li><a href="/all/" title="All Videos" <%if (strSelected == "all"){%>class="current"<%} %>><span>All</span></a></li> 
    <li><a href="/fun/" title="Fun Videos" <%if (strSelected == "fun"){%>class="current"<%} %>><span>Fun</span></a></li> 
    <li><a href="/comedy/" title="Comedy Videos" <%if (strSelected == "comedy"){%>class="current"<%} %>><span>Comedy</span></a></li> 
</ul> 

Quand je vais passer comédie de ma page Web à usercontrol alors il va sélectionner le menu comédie. Je veux mettre en œuvre le même genre de fonctionnalité dans le cas des pages maîtres, quelqu'un pourrait-il me dire comment réaliser ce type d'installation pour les pages maîtres. D'une manière ce que je pense est de passer un paramètre de chaîne de requête http://example.com/all/?select=all, je vais vérifier la fonction maître page_load si le paramètre de sélection est "tout" ou amusant ou comédie puis sélectionnez le menu correspondant. Mais ce n'est pas bon, car je ne veux pas ajouter un paramètre de chaîne de requête supplémentaire à mes URL.

Dites-moi comment résoudre ce problème.

Merci

Répondre

1

Vous pouvez accéder aux propriétés de la page principale de votre page de contenu après la coulée du maître du type correct:

public class MyMasterPage : MasterPage 
{ 
    public string MyMenuProperty { get; set; } 

    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     if (MyMenuProperty == "comedy") 
     { 
      /* do your menu stuff */ 
     } 
    } 
} 

public class MyContentPage : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     var myMaster = Page.Master as MyMasterPage; 
     if (myMaster != null) 
     { 
      myMaster.MyMenuProperty = "comedy"; 
     } 
    } 
+0

Cela semble bon et même que usercontrol, mais y at-il quelque chose avec lequel au lieu d'écrire le code de la propriété sur ma page web, puis-je passer directement "comédie" du balisage html ?? comme dans usrecontrols ?? – Prashant

+0

Je pense que la réponse de Jammin a cette partie couverte. Il semble que si vous mettez <% @ MasterType VirtualPath = "~/YourMaster.master"%> dans votre page de contenu, le casting sera fait automatiquement. – rmac

1

Une façon je l'ai fait Simular dans la est passé ajouter à des dérivés de la page de toutes les pages de contenu:

<%@ MasterType VirtualPath="~/YourMaster.master" %> 

Puis dans le maître i exposé ceci:

private PageTypes currentPageType; 

public PageTypes CurrentPageType 
{ 
    get { return currentPageType; } 
    set { currentPageType = value; } 
} 

Sur ce travail cela a servi si le maître savait quel type de page, il était donc changé quelques petites choses, les couleurs, les contrôles, etc. Donc, à partir d'un contenu Pageload je l'ai fait

Master.CurrentPageType = PageTypes.System; 

Une chose à noter cependant, VS tend à se plaindre de la dérivée MasterType jusqu'à ce que vous faites une reconstruction tout.

1

Je pense que peut-être une approche complètement différente pourrait être plus facile à mettre en œuvre et à maintenir.

Que diriez-vous juste d'analyser l'URL dans votre header.ascx?

Par exemple:

<li><a href="/all/" title="All Videos" runat="server" class='<%= Request.Url.ToString().Contains("/all/") ? "current" : "" %>' ><span>All</span></a></li> 

De cette façon, vous ne serez pas à vous soucier de la définition des propriétés, l'accès/casting pages maître etc ...

Questions connexes