在我的网络应用程序(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函数,然后选择相应的菜单。但这并不好,因为我不想在我的网址中添加额外的查询字符串参数。
请告诉我如何解决这个问题。
由于
答案 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