如何从内容页访问母版页控件

how to access master page control from content page

提问人:LeonidasFett 提问时间:3/22/2013 最后编辑:ArnonZLeonidasFett 更新时间:2/15/2019 访问量:157594

问:

我有一个母版页,其中包含状态消息的标签。我需要从不同的 .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!");
                }                                       
            }
        }
    }                   
}
asp.net 母版页 代码隐藏

评论

0赞 Praveen Nambiar 3/22/2013
因此,您想访问所有页面中的...右?label's text propertyaspx
0赞 LeonidasFett 3/22/2013
是的,这基本上就是我想要实现的目标......
1赞 Tim Schmelter 3/22/2013
@LeonidasFett:应该可以工作,那你有什么问题?你用过调试器吗?
0赞 LeonidasFett 3/22/2013
我收到一个错误,即对于 var,命名空间不可用,即使我在方法中使用它时它也可以工作。它告诉我 Master 没有对象引用......
0赞 Tim Schmelter 3/22/2013
啊,你不能以这种方式初始化字段。用于初始化它。Page_Init

答:

3赞 Tim Schmelter 3/22/2013 #1

不能在字段中使用 var,只能在局部变量上使用 var。

但即使这样也行不通:

Site master = Master as Site;

因为不能在字段中使用,并且与 相同。因此,只需在页面完全初始化时初始化该字段,即可使用:thisMaster as Sitethis.Master as SitePage_Initthis

Site master = null;

protected void Page_Init(object sender, EventArgs e)
{            
    master = this.Master as Site;
}
93赞 Praveen Nambiar 3/22/2013 #2

在 MasterPage.cs 文件中,添加如下内容:propertyLabel

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 Propertytext

this.Master.ErrorMessage = "Your Error Message here";

评论

1赞 Praveen Nambiar 3/22/2013
将此问题的标题更改为更相关的标题。“如何从内容页访问母版页控件”
1赞 LeonidasFett 3/22/2013
好的,现在我得到了属性字段中标签的 NullReferenceException......我在上面上传了我的新代码。我在这里错过了什么吗?
0赞 Praveen Nambiar 3/22/2013
似乎你错过了蒂姆在下面提到的初始化部分。
0赞 R.Akhlaghi 7/15/2017
嗨,亲爱的朋友,这在更新面板上不起作用,我怎样才能通过更新面板运行它
0赞 afr0 12/11/2017
您需要在 updatePanel 上调用 Update 方法。如果要将更改从隐藏的代码直接推送到 updatepanel。确实对我有用。
35赞 user3497034 4/5/2014 #3

在内容页面中,您可以访问标签并设置文本,例如

此处“lblStatus”是母版页标签 ID

Label lblMasterStatus = (Label)Master.FindControl("lblStatus");

lblMasterStatus.Text  = "Meaasage from content page";

评论

0赞 toddmo 4/13/2016
如果师傅有师傅,你就必须.Master.Master
4赞 surya 5/21/2014 #4

我在我的 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";
10赞 shweta 10/31/2014 #5

它有效

在子页上查找母版页控件

Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;                    
lbl_UserName.Text = txtUsr.Text;
1赞 Resource 1/20/2016 #6

如果您有嵌套的 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”)

1赞 James Heffer 1/9/2019 #7

如果您尝试访问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;

现在,我们已经访问了站点主控件,并使它们在登录页面上不可见。