【问题标题】:Can not access control from nested master page in content page无法从内容页面中的嵌套母版页访问控制
【发布时间】:2012-12-06 10:34:37
【问题描述】:

我正在使用嵌套母版页,我想使用来自嵌套母版页的Label 控件并更新其文本。但它没有访问。当我删除外部母版页时,它工作正常。以下是标记和代码。

外部大师

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Roster.Site" %>

嵌套大师

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="RoasterMaster.master.cs" Inherits="Roster.RoasterMaster"  MasterPageFile="~/Site.Master" %>
<%@ MasterType VirtualPath ="~/Site.Master" %>

内容页

<%@ Page Language="C#" AutoEventWireup="true" Inherits="RequestsView" CodeBehind="ViewRequestsByPM.aspx.cs" MasterPageFile ="~/Roaster/RoasterMaster.Master" Title ="Roaster- View Requests by PM" %>
<%@ MasterType VirtualPath ="~/Roaster/RoasterMaster.Master" %>

内容页码

protected void Page_Load(object sender, EventArgs e)
{


    Label lblTitle = new Label();

    lblTitle =(Label)Master.FindControl("lblTitle");
    lblTitle.Text = "View Roaster Request";
}

实施中出了什么问题。请帮忙。谢谢

【问题讨论】:

  • 你知道如何使用公共属性吗?这将是设置/获取标签值的更好方法
  • 您必须首先使用包含控件“lblTitle”的 master.master 或 page.master 来找到特定的母版页
  • 页面上有特定的标记''

标签: asp.net master-pages master


【解决方案1】:

您可以在

中添加以下代码sn-p

嵌套母版页

public string PageTitle { get; set; } // In page_load
lblTitle.Text = PageTitle;

内容页码

this.Master.PageTitle = "YOUR TEXT";

这对你有用...

【讨论】:

    【解决方案2】:

    假设您的标签在名册母版页中,您可以简单地在母版页代码后面添加方法来设置文本。例如,

    RoasterMaster.master.cs

    public void SetTitle(string value)
    {
       this.lblTitle = value;
    }
    

    在内容页面代码中

    Master.SetTitle("View Roaster Request");
    

    如果您的标签在外部主机中,那么您可以类似地将调用从名册主机代码转发到外部主机。

    编辑
    您的代码在嵌套的主案例场景中不起作用,因为主页面内容被添加到具有不同命名容器的页面控件层次结构中。 FindControl 方法不跨越多个命名容器,这里就是这种情况 - 因为嵌套,您已经嵌套了命名容器。 Page.Master 会给您外部命名容器,但您的标签可能位于内部命名容器中。其中一种方法是编写您自己的查找控件实现,该实现将在控件树中重复出现,但实际上它没有意义 - 我宁愿使用更高效且更重要的是可维护性更好的上述代码。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多