如何从aspx页面访问用户控件ID?

时间:2014-07-15 11:37:52

标签: c# asp.net user-controls

我有一个usercontrol,如下所示。

public partial class lcont : System.Web.UI.UserControl
{
  public delegate void mydel(string str);

  protected void Page_Load(object sender, EventArgs e)
  {
  }
  public event mydel myevent;

  public void butt_click(object sender, EventArgs e)
  {

    if (myevent != null)
    {
        myevent(tv.SelectedNode.Value);
    }  
  }
}

一个test.aspx,它使用了上面的用户控件。

<body>
 <form id="form1" runat="server">
 <uc1:lcont ID="lcont1" runat="server" />
 <div>
 <asp:Label ID ='lbl' runat="server" Text ="lbl"  />
 </div>
 </form>
</body>

它的代码隐藏是:

protected void Page_Load(object sender, EventArgs e)
{

   lcont1.myevent += delegate(string st)
    {
        lbl.Text = st;
    };

}

正如你在这里看到的,我可以调用“lcont1”,它是aspx文件代码隐藏中usercontrol的id。

现在的问题是:我想做同样的事情,但这次使用的aspx文件没有直接实现usercontrol但继承了实现了usercontrol的母版页。

换句话说,usercontrol在主页面中实现,主页面由aspx页面实现。现在我想访问aspx页面中的usercontrol id,就像上面的例子一样。请帮助!

1 个答案:

答案 0 :(得分:1)

我这样做的方式是......

MasterPage中创建一个公开UserControl

的公共函数/属性
public lcont GetLcont1()
{
   return lcont1;
}

然后在您的.aspx中,您可以投放MasterPage

MyMasterPage myMaster = (MyMasterPage)Page.Master;

现在你应该能够得到你的UserControl并用它来做你需要的事情

lcont lcont1 = myMaster.GetLcont1();
lcont1.doSomething();

<强>更新

由于OP需要勺子喂食,这里是.aspx页面的代码隐藏......

protected void Page_Load(object sender, EventArgs e)
{
  // Note: replace "MyMasterPage" with the name of your master page class
  MyMasterPage myMaster = (MyMasterPage)Page.Master;
  lcont lcont1 = myMaster.GetLcont1();
  lcont1.myevent += delegate(string st)
  ...
}