无法从内容页面中的嵌套母版页访问控件

时间:2012-12-06 10:34:37

标签: asp.net master-pages master

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

OUTER MASTER

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

NESTED MASTER

<%@ 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";
}

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

2 个答案:

答案 0 :(得分:2)

您可以在

中添加以下代码段

NESTED MASTER PAGE

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

内容页面代码

this.Master.PageTitle = "YOUR TEXT";

这对你有用......

答案 1 :(得分:1)

假设您的标签位于名册母版页中,您只需添加方法即可在后面的母版页代码中设置文本。例如,

RoasterMaster.master.cs

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

在内容页面代码中

Master.SetTitle("View Roaster Request");

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

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