假设:渠道合作伙伴用户控件包含添加新合作伙伴的弹出窗口。弹出窗口有一个保存按钮(ASP.Net 服务器端控件)和一个服务器端单击处理程序,该处理程序实际上将数据提交到数据库。此外,您的用户控件包括一个带有异步回发触发器的附加更新面板,这样当用户保存新合作伙伴时,表单不会回发,而是进行异步回发
所以通常我使用事件来允许用户控件相互交谈。在这种情况下,您只需要发起一个事件来说明新渠道合作伙伴的创建时间,并在此事件上触发您的更新面板。
渠道合作伙伴用户控制。
因此,我将向 Channel Partners 用户控件添加一个名为 NewChannelPartnerCreated 的新事件。
public event EventHandler<EventArgs> NewChannelPartnerCreated;
同样对于 Channel Partners 用户控件,一旦保存成功完成,我将附加到 Save 按钮单击处理程序以引发事件。
protected void btnSave_Click(object sender, EventArgs e)
{
// code that commits new partner to the database
if (errors == false)
NewChannelPartnerCreated(this, null);
else
// show errors
}
预订用户控制
修改 Reservations 用户控件,公开一个刷新下拉列表的公共方法,并调用包装下拉列表的更新面板的 update 方法
Public void RefreshChannelPartnersList()
{
ChannelPartnersListUpdatePanel.Update();
// this databind code might not be needed if you have already have it in the PreRender (not PageLoad)
ddlChannelPartners.DataSource = YouMethodToGetChannelPartnersFromDatabase();
ddlChannelPartners.DataBind();
}
用户控件容器页面
最后在托管两个用户控件的页面后面的代码中;我将进行以下更改以完成图片。
在页面加载中,您希望收听 Channel Partners 用户控件引发的 NewChannelPartnerCreated 事件。事件处理程序只需要调用由 Reservations 用户控件公开的refresh方法
protected void Page_Load(object sender, EventArgs e)
{
NewChannelPartnerCtrl.NewChannelPartnerCreated += new EventHandler<EventArgs>(NewChannelPartnerCtrl_NewChannelPartnerCreated);
}
void NewChannelPartnerCtrl_NewChannelPartnerCreated(object sender, EventArgs e)
{
ReservationsCtrl.UpdateChannelPartnersList();
}
可下载的示例
试试这个http://sdrv.ms/18138yH