如何在母版页中选择当前菜单?

时间:2009-12-14 10:50:31

标签: c# .net asp.net

在我的网络应用程序(asp.net C#)中,我有“All”,“Education”,“Fun”,“Comedy”等菜单。我想当我选择All然后它应该显示为当前菜单,我有一个CSS类当前。

对于WebUserControls,我可以通过传递当前页面的参数来轻松完成,如下所示:

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>

当我将喜剧从我的网页传递给用户控制时,它会选择喜剧菜单。我想在母版页的情况下实现相同的功能,任何人都可以告诉我如何为母版页实现这种类型的工具。

我觉得传递查询字符串参数http://example.com/all/?select=all的一种方法是,如果选择参数是“全部”或有趣或喜剧,我将检查master page_load函数,然后选择相应的菜单。但这并不好,因为我不想在我的网址中添加额外的查询字符串参数。

请告诉我如何解决这个问题。

由于

4 个答案:

答案 0 :(得分:1)

我过去做过simular的一种方法是将其添加到任何内容页面的页面派生词中:

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

然后在大师中我暴露了这个:

 private PageTypes currentPageType;

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

在这个工作中,这是使用的,所以主人知道它是什么类型的页面,因此改变了一些东西,颜色,控制等。所以从内容页面加载我做了

Master.CurrentPageType = PageTypes.System;

有一点需要注意的是,在你重建所有内容之前,VS倾向于对MasterType衍生产品抱怨。

答案 1 :(得分:1)

将主控转换为正确的类型后,您可以从内容页面访问母版页属性:

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";
        }
    }

答案 2 :(得分:1)

我在想,也许一种完全不同的方法可能更容易实现和维护。

你如何解析header.ascx中的URL?

例如:

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

这样,你就不必担心设置属性,访问/转换母版等......

答案 3 :(得分:0)

Hai prashant,

我在一个月前遇到了同样的问题,我发布了堆叠溢出检查这一点,它可以帮助你Find a UnorderedList <UL> control inside a master page from a content page in asp.net