提问人:LeonidasFett 提问时间:3/22/2013 最后编辑:ArnonZLeonidasFett 更新时间:2/15/2019 访问量:157594
如何从内容页访问母版页控件
how to access master page control from content page
问:
我有一个母版页,其中包含状态消息的标签。我需要从不同的 .aspx 页面设置状态文本。如何从内容页面完成此操作?
public partial class Site : System.Web.UI.MasterPage
{
public string StatusNachricht
{
get
{
return lblStatus.Text;
}
set
{
lblStatus.Text = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
我试过这个,但没有成功让它工作:
public partial class DatenAendern : System.Web.UI.Page
{
var master = Master as Site;
protected void Page_Load(object sender, EventArgs e)
{
if (master != null)
{
master.setStatusLabel("");
}
}
protected void grdBenutzer_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
//some code
if (master != null)
{
master.setStatusLabel("Passwort erfolgreich geändert.");
}
}
catch (Exception ex)
{
if (master != null)
{
master.setStatusLabel("Passwort konnte nicht geändert werden!");
}
}
}
}
}
答:
不能在字段中使用 var,只能在局部变量上使用 var。
但即使这样也行不通:
Site master = Master as Site;
因为不能在字段中使用,并且与 相同。因此,只需在页面完全初始化时初始化该字段,即可使用:this
Master as Site
this.Master as Site
Page_Init
this
Site master = null;
protected void Page_Init(object sender, EventArgs e)
{
master = this.Master as Site;
}
在 MasterPage.cs 文件中,添加如下内容:property
Label
public string ErrorMessage
{
get
{
return lblMessage.Text;
}
set
{
lblMessage.Text = value;
}
}
在您的页面上,在页面指令的正下方添加以下内容:aspx
<%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %>
<%@ MasterType VirtualPath="Master Path Name" %> // Add this
在您的页面中,您可以轻松访问并根据需要进行设置。喜欢这个:codebehind(aspx.cs)
Label Property
text
this.Master.ErrorMessage = "Your Error Message here";
评论
在内容页面中,您可以访问标签并设置文本,例如
此处“lblStatus”是母版页标签 ID
Label lblMasterStatus = (Label)Master.FindControl("lblStatus"); lblMasterStatus.Text = "Meaasage from content page";
评论
Master.Master
我在我的 System.Web.UI.Page 类中有一个帮助方法
protected T FindControlFromMaster<T>(string name) where T : Control
{
MasterPage master = this.Master;
while (master != null)
{
T control = master.FindControl(name) as T;
if (control != null)
return control;
master = master.Master;
}
return null;
}
然后,您可以使用以下代码进行访问。
Label lblStatus = FindControlFromMaster<Label>("lblStatus");
if(lblStatus!=null)
lblStatus.Text = "something";
它有效
在子页上查找母版页控件
Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;
lbl_UserName.Text = txtUsr.Text;
如果您有嵌套的 MasterPage,则情况会更复杂。您需要首先找到包含嵌套 MasterPage 的内容控件,然后从中查找嵌套 MasterPage 上的控件。
关键位:Master.Master。
请参阅此处:http://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl
例:
'查找内容控件
将 ct 调暗为 ContentPlaceHolder = Me.Master.Master.FindControl(“cphMain”)
“现在在该内容中找到控件
调暗 lbtnSave As LinkButton = ct。FindControl(“lbtnSave”)
如果您尝试访问html元素:这是一个HTML锚...
我的导航栏中的项目不是列表项 (),而是 html 锚点 (<li>
<a>
)
见下文:(这是网站主数据)
<nav class="mdl-navigation">
<a class="mdl-navigation__link" href="" runat="server" id="liHome">Home</a>
<a class="mdl-navigation__link" href="" runat="server" id="liDashboard">Dashboard</a>
</nav>
现在,在您的代码隐藏中,对于我来说,它是登录页面......
在 PageLoad() 上定义:
HtmlAnchor lblMasterStatus = (HtmlAnchor)Master.FindControl("liHome");
lblMasterStatus.Visible =false;
HtmlAnchor lblMasterStatus1 = (HtmlAnchor)Master.FindControl("liDashboard");
lblMasterStatus1.Visible = false;
现在,我们已经访问了站点主控件,并使它们在登录页面上不可见。
评论
label's text property
aspx
Page_Init