【发布时间】:2009-11-10 00:07:15
【问题描述】:
我很想知道使用 .net 2.0 和母版页是否可以找到我所在的页面以便我可以使用它来设置标签的样式?
我的母版页上有一个导航栏,我要做的是:
如果用户,比如在联系页面上,联系页面的选项卡将是不同的颜色,这可以实现吗?我见过一些不使用母版页的示例,当然您可以使用封装的正文标签来表示您的位置,但这不适用于母版页。
谢谢R。
【问题讨论】:
标签: asp.net css asp.net-2.0 master-pages
我很想知道使用 .net 2.0 和母版页是否可以找到我所在的页面以便我可以使用它来设置标签的样式?
我的母版页上有一个导航栏,我要做的是:
如果用户,比如在联系页面上,联系页面的选项卡将是不同的颜色,这可以实现吗?我见过一些不使用母版页的示例,当然您可以使用封装的正文标签来表示您的位置,但这不适用于母版页。
谢谢R。
【问题讨论】:
标签: asp.net css asp.net-2.0 master-pages
MasterPage 尽管名称听起来像是使用它的页面的子页面。
把它想象成一个页面的用户控件。您实际上可以访问 Page 实例及其 Request 属性。
这是一个关于如何使用它的示例
switch(Request.Path){
case "/page1/aspx":
//dosomething to your tabs
break:
case "/page1/aspx":
//dosomething to your tabs
break:
.
.
.
default:
//dosomething else
.
.
.
}
【讨论】:
switch 而不是select,我在想什么? :P 无论如何,我的代码只是一个示例,它可以使用 Page.Title 或使用查找(如果有的话)。
如果您想从页面更改母版页上的内容(即更改标签颜色),您应该:
在母版页中,公开一个可以改变标签颜色的属性或方法。
即:
public void changecolor(string PageName, string Color){
switch(PageName){
case "home":
this.TabHome.Color=Color;
}
}
然后在带有母版页路径的 aspx 页面顶部放置一个指令。像这样:
<%@ MasterType VirtualPath="~/Site.master" %>
完成此操作后,您可以从代码隐藏中访问母版页并查看其公开的方法,然后只需调用它即可完成。
protected void Page_Init(object sender, EventArgs e){
Master.changecolor("home", "red");
}
这样,您不必解析页面名称并处理尝试更改页面名称等时出现的维护问题。您还将案例语句限制为选项卡的数量,而不是数量您网站中的页面数。
【讨论】:
+1 虽然每个页面和母版页之间会紧密耦合,但根据场景的不同,它可能更容易实现。
在您的母版页(或帮助程序类)中创建以下方法,然后在您的母版页的 Page_Load 方法中添加对它的引用:
public string GetCurrentPageName()
{
Uri uri = Request.Url;
string[] uriSegments = uri.Segments;
string pageName = "";
if( 0 < uriSegments.Length )
{
pageName = uriSegments.Last();
}
return pageName;
}
}
这应该给你当前的文件名——你可能还想去掉文件名的“.aspx”部分。我还没有用 QueryString 测试过这个,所以不确定 Last() 在这种情况下是否仍然返回文件名。
如果您的标签是 asp.net 控件,您可以使用 FindControl() 来查找标签 - 当然,您需要将标签 ID 与您的页面名称相匹配。获得控件后,您可以在代码隐藏中添加“选定”样式。
【讨论】: