我正在使用嵌套母版页,我想在嵌套母版页中使用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";
}
实施出了什么问题。请帮忙。感谢
答案 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
会给你外部命名容器,但你的标签可能位于内部命名容器中。其中一种方法是编写自己的查找控件实现,它将在控制树中重现但实际上没有意义 - 我宁愿使用上面的代码,它更有效,更重要的是更好的可维护性。