代码之家  ›  专栏  ›  技术社区  ›  jinsungy

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

  •  19
  • jinsungy  · 技术社区  · 16 年前

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

    16 回复  |  直到 14 年前
        1
  •  31
  •   Todd H.    14 年前

    我用这个:

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

    它以这种格式“ASP.default\u aspx”重新运行类名,但我发现在大多数情况下很容易解析。

        2
  •  24
  •   Norbert B. MJB    16 年前

    最好还是让孩子们去吧 ContentPage 通知 MasterPage . 这就是为什么 内容页 有一个 Master 财产及 母板页 没有 Child 所有物 最好的做法是在 财产 内容页

    如果使用这种技术,最好显式指定母版页的类名。这使得在ContentPage中使用母版页成为可能。

    //Page_Load
    MyMaster m = (MyMaster)this.Master;
    
    m.TellMasterWhoIAm(this);
    

    希望这有帮助。

        3
  •  9
  •   Gord    16 年前

    这听起来是个坏主意。母版的想法是,它不应该关心有什么页面,因为这是每个页面的所有通用代码。

        4
  •  9
  •   WraithNath    14 年前

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

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

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

    这个代码对我有用:

                    //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");
                    }
    
        5
  •  7
  •   Sarim Shekhani    11 年前

    使用下面的代码。

    Page.ToString().Replace("ASP.","").Replace("_",".")
    
        6
  •  4
  •   JoshBerke    15 年前
        7
  •  3
  •   SHS    9 年前

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

    或者更复杂,但可读性较差:

    if (Page.TemplateControl.AppRelativeVirtualPath.Equals("~/YourPageName.aspx", StringComparison.OrdinalIgnoreCase))
    {
       // your code here
    }
    
        8
  •  1
  •   p.s.w.g    10 年前
    Request.CurrentExecutionFilePath;
    

    Request.AppRelativeCurrentExecutionFilePath;
    
        9
  •  0
  •   spilliton    16 年前

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

    this.Request.Url.AbsolutePath
    

        10
  •  0
  •   Emad Mokhtar    11 年前

    string pageName = this.Request.Url.Segments.Last(); 
    
    if (pageName.Contains("EmployeeTermination.aspx"))
    {
    
    }
    
        11
  •  0
  •   sebprime    11 年前

    你可以试试这个:

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

    将该代码放入 title 标签 Site.Master

        12
  •  0
  •   Shadi Alnamrouti    9 年前
    string s =   Page.ToString().Replace("ASP.directory_name_","").Replace("_aspx",".aspx").Replace("_","-");
            if (s == "default.aspx")
                  { /* do something */ }
    
        13
  •  0
  •   Vinez    8 年前

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

        14
  •  0
  •   Prashant Pimpale Dila Gurung    5 年前

    下面的代码工作起来像一个被施了魔法的……试试看

    string PName = Request.UrlReferrer.Segments[Request.UrlReferrer.Segments.Length - 1];
    
        15
  •  -2
  •   wulimaster    16 年前

    主页面代码中应该可以使用Page.Request.Url.PathAndQuery或Url Uri对象的其他属性之一。

        16
  •  -4
  •   Kon    16 年前

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