【发布时间】:2008-11-06 15:15:21
【问题描述】:
我正在母版页上编写代码,我需要知道正在显示哪个子(内容)页面。我怎样才能以编程方式做到这一点?
【问题讨论】:
标签: c# asp.net master-pages
我正在母版页上编写代码,我需要知道正在显示哪个子(内容)页面。我怎样才能以编程方式做到这一点?
【问题讨论】:
标签: c# asp.net master-pages
我用这个:
string pageName = this.ContentPlaceHolder1.Page.GetType().FullName;
它以这种格式“ASP.default_aspx”重新调整类名,但我发现对于大多数用途来说这很容易解析。
希望有帮助!
【讨论】:
string pageName = this.ContentPlaceHolder1.Page.GetType().BaseType.Name; 这将返回子页面的基类类型。在大多数情况下,它会给出不带“aspx”标签的页面地址。例如“默认”。
最好让ContentPage 通知MasterPage。这就是为什么ContentPage 具有Master 属性而MasterPage 没有Child 属性的原因。
最好的做法是在MasterPage 上定义一个属性或方法,并通过ContentPage 的Master 属性使用它。
如果您使用此技术,最好明确指定 MasterPage 的类名。这使得在 ContentPage 中使用 MasterPage。
例子:
//Page_Load
MyMaster m = (MyMaster)this.Master;
m.TellMasterWhoIAm(this);
希望这会有所帮助。
【讨论】:
这听起来是个坏主意。大师的想法是它不应该关心那里有什么页面,因为这是每个页面的所有通用代码。
【讨论】:
我有理由检查母版页中的子页。
我的母版页上有所有菜单选项,如果未设置某些系统设置,则需要禁用它们。
如果不是,则会显示一条消息并禁用按钮。由于设置页面是此母版页的内容页面,因此我不希望该消息一直显示在所有设置页面上。
这段代码对我有用:
//Only show the message if on the dashboard (first page after login)
if (this.ContentPlaceHolder1.Page is Dashboard)
{
//Show modal message box
mmb.Show("Warning Message");
}
【讨论】:
使用下面的代码。
Page.ToString().Replace("ASP.","").Replace("_",".")
【讨论】:
【讨论】:
这是我对问题的解决方案(此代码进入母版页后面的代码):
if (Page.TemplateControl.AppRelativeVirtualPath == "~/YourPageName.aspx")
{
// your code here
}
或者更复杂一点,但可读性较差:
if (Page.TemplateControl.AppRelativeVirtualPath.Equals("~/YourPageName.aspx", StringComparison.OrdinalIgnoreCase))
{
// your code here
}
【讨论】:
Request.CurrentExecutionFilePath;
或
Request.AppRelativeCurrentExecutionFilePath;
【讨论】:
我在我的一个项目中做了类似的事情,根据正在加载的页面动态附加 css 文件。我只是从请求中获取文件的名称:
this.Request.Url.AbsolutePath
然后从那里提取文件名。不过,我不确定如果您正在重写 URL,这是否会起作用。
【讨论】:
您可以通过获取最后一个段或请求来做到这一点,我将成为表单名称
string pageName = this.Request.Url.Segments.Last();
if (pageName.Contains("EmployeeTermination.aspx"))
{
}
【讨论】:
你可以试试这个:
<%: this.ContentPlaceHolder1.Page.GetType().Name.Split('_')[0].ToUpper() %>
将该代码放在Site.Master 的title 标记内
【讨论】:
string s = Page.ToString().Replace("ASP.directory_name_","").Replace("_aspx",".aspx").Replace("_","-");
if (s == "default.aspx")
{ /* do something */ }
【讨论】:
我正在使用这么多答案
<%if(this.MainContent.Page.Title != "mypagetitle") { %>
<%}%>
这使得排除任何单个页面变得容易,并且由于您比较一个字符串,您甚至可以为 exclude_pagetitle 之类的页面添加前缀并比较标题的子字符串。我通常使用它来从某些我不想加载的功能中排除登录页面,例如会话超时和实时聊天。
【讨论】:
下面的代码就像一个迷人的..试试它
string PName = Request.UrlReferrer.Segments[Request.UrlReferrer.Segments.Length - 1];
【讨论】:
您应该可以从母版页代码中获得 Page.Request.Url.PathAndQuery 或 Url Uri 对象的其他属性之一。
【讨论】:
您可以在代码隐藏中检查页面类型:
// Assuming MyPage1, MyPage2, and MyPage3 are the class names in your aspx.cs files:
if (this.Page is MyPage1)
{
// do MyPage1 specific stuff
}
else if (this.Page is MyPage2)
{
// do MyPage2 specific stuff
}
else if (this.Page is MyPage3)
{
// do MyPage3 specific stuff
}
【讨论】:
MyPage1,但实际上并非如此。你得到类似ASP.MyPage1_aspx的东西,你不能在编译时引用这个类型。