我有一个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,就像上面的例子一样。请帮助!
答案 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)
...
}