在母版页上查找控件返回null

时间:2012-02-23 23:28:02

标签: asp.net

我试图访问ModalPopupExtender控件,它总是返回null或对象集未设置为对象的intance。我已经尝试过master.Page.FindControl(“”)和master.FindControl(“”)而我仍然没有得到结果

MasterPage master = Page.Master as MasterPage;
AjaxControlToolkit.ModalPopupExtender popup = master.Page.FindControl("ModalPopupExtender2") as AjaxControlToolkit.ModalPopupExtender;

更新:无法更改母版页中标签的文字

MasterPage master = Page.Master;
AjaxControlToolkit.ModalPopupExtender popup1 = master.FindControl("ModalPopupExtender1") as AjaxControlToolkit.ModalPopupExtender;
Label lblMessage = master.FindControl("lblMessage") as Label;
lblMessage.Text = msg;
Literal ltrlMessage = master.FindControl("ltrlMessage") as Literal;
ltrlMessage.Text = msg;

Label MessageStatus = master.FindControl("lblMessageStatus") as Label;
MessageStatus.Text = msgStatus;        
popup1.Show();

3 个答案:

答案 0 :(得分:0)

你可以做到

    MasterPage master = Page.Master;

答案 1 :(得分:0)

查看this个答案。您可以拥有strongly typed master page,因此您无需查找并转换控件。主页上的控件可以公开访问,页面将知道母版页的类型并可以访问它。

修改

  

控件不公开

假设您已在页面指令中设置了Master属性:

<%@ Page MasterPageFile="~/MyMaster.master" ...

可能性很大,你可能不需要实际控制。相反,您需要在母版页中设置一些内容。我只是使用内部方法来做你需要做的事情:

public partial class MyMaster: MasterPage
{
    internal void SetTheFoo(string foo)
    {
        this.WhateverControl.Text = foo;
    }

    //etc...
}

然后,从您的页面,只需调用它:

Master.SetTheFoo("Foo");

如果你仍然需要进入控件,那么在你的母版页中,你可以添加一个暴露模态弹出扩展器的公共属性。

public AjaxControlToolkit.ModalPopupExtender MyModalPopup
{
    get { return this.TheNonPublicModalPopupExtenderControl; }

}

答案 2 :(得分:0)

如果您的网页是母版的孩子

试试这个:

AjaxControlToolkit.ModalPopupExtender popup = (AjaxControlToolkit.ModalPopupExtender)Page.Master.FindControl("ModalPopupExtender2");

此致