如何确定从母版页显示哪个子页面?

时间:2008-11-06 15:15:21

标签: c# asp.net master-pages

我正在母版页上编写代码,我需要知道正在显示哪个子(内容)页面。我该如何以编程方式执行此操作?

16 个答案:

答案 0 :(得分:28)

我用这个:

string pageName = this.ContentPlaceHolder1.Page.GetType().FullName;

它以这种格式“ASP.default_aspx”返回类名,但我发现在大多数情况下都很容易解析。

希望有所帮助!

答案 1 :(得分:24)

最好让ContentPage通知MasterPage。这就是ContentPage具有Master属性而MasterPage没有Child属性的原因。 最好的做法是在MasterPage上定义属性或方法,并通过Master的{​​{1}}属性使用它。

如果您使用此技术,最好明确指定MasterPage的类名。这使得在ContentPage中使用MasterPage。

示例:

ContentPage

希望这有帮助。

答案 2 :(得分:10)

这开始时听起来不错。主人的想法是它不应该关心哪个页面,因为这是每个页面的所有常用代码。

答案 3 :(得分:8)

我有理由检查母版页中的子页面。

我的母版页上有我的所有菜单选项,如果未设置某些系统设置,则需要禁用它们。

如果不是,则显示一条消息并禁用按钮。由于设置页面是该母版页的内容页面,因此我不希望该消息继续显示在所有设置页面上。

这段代码对我有用:

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

答案 4 :(得分:7)

使用以下代码。

Page.ToString().Replace("ASP.","").Replace("_",".")

答案 5 :(得分:4)

答案 6 :(得分:3)

这是我对问题的解决方案(此代码进入母版页后面的代码):

if (Page.TemplateControl.AppRelativeVirtualPath == "~/YourPageName.aspx")
{
   // your code here
}

或更复杂,但不太可读:

if (Page.TemplateControl.AppRelativeVirtualPath.Equals("~/YourPageName.aspx", StringComparison.OrdinalIgnoreCase))
{
   // your code here
}

答案 7 :(得分:1)

Request.CurrentExecutionFilePath;

Request.AppRelativeCurrentExecutionFilePath;

答案 8 :(得分:0)

我在我的项目中做了类似的事情,根据正在加载的页面动态附加css文件。我只是从请求中获取文件的名称:

this.Request.Url.AbsolutePath

然后从那里提取文件名。如果您正在进行URL重写,我不确定这是否有效。

答案 9 :(得分:0)

您可以通过获取请求的最后一部分来完成此操作,我将成为表单名称

string pageName = this.Request.Url.Segments.Last(); 

if (pageName.Contains("EmployeeTermination.aspx"))
{

}

答案 10 :(得分:0)

你可以尝试这个:

<%: this.ContentPlaceHolder1.Page.GetType().Name.Split('_')[0].ToUpper() %>

将该代码放在title

Site.Master标记内

答案 11 :(得分:0)

string s =   Page.ToString().Replace("ASP.directory_name_","").Replace("_aspx",".aspx").Replace("_","-");
        if (s == "default.aspx")
              { /* do something */ }

答案 12 :(得分:0)

我正在使用的答案很多

<%if(this.MainContent.Page.Title != "mypagetitle") { %>
<%}%>

这样可以轻松排除任何单个页面,因为您比较字符串甚至可以为exclude_pagetitle等页面添加前缀并比较标题的子字符串。我通常使用此功能将登录页面排除在我不想加载的某些功能(如会话超时和实时聊天)之外。

答案 13 :(得分:0)

下面的代码工作就像一个迷人的..它

string PName = Request.UrlReferrer.Segments [Request.UrlReferrer.Segments.Length - 1];

答案 14 :(得分:-2)

PageRequest.Url.PathAndQuery或Url Uri对象的其他属性之一应该可以从母版页代码中使用。

答案 15 :(得分:-4)

您可以在代码隐藏中检查页面类型:

// 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
}