我有一个页面,我使用2个用户控件。一个控件是预留控制,另一个是通道伙伴控制。在预订控制方面,我有一个下拉列表,其中包含所有渠道合作伙伴。当用户拥有新的渠道合作伙伴时,他会点击AddNewChannel链接并弹出渠道合作伙伴,然后用户将新渠道合作伙伴插入数据库。现在我的问题是,数据被插入数据库我希望下载预订要刷新,并应包含新的渠道合作伙伴。我试过这样:
UpdatePanel upnl = (UpdatePanel)Page.FindControl("UpdatePanel1");
if (upnl != null)
upnl.Update();
我在更新面板中的预订控制下拉菜单。但它没有用。任何尝试提供帮助的人都将不胜感激。
答案 0 :(得分:0)
Anser是使用模型弹出的卸载方法并从那里更新。感到失望,没有从这个社区得到任何答案.....
答案 1 :(得分:0)
假设:渠道合作伙伴用户控制包含用于添加新合作伙伴的弹出窗口。弹出窗口有一个Save按钮(ASP.Net服务器端控件)和一个服务器端点击处理程序,它实际上将数据提交给数据库。此外,您的用户控件还包含一个带有异步回发触发器的附加更新面板,以便在用户保存新合作伙伴时,表单不会回发,而是进行异步回发
因此,我通常使用事件来允许用户控件相互通信。在这种情况下,您只需要提出一个事件来说明何时创建了新的频道合作伙伴,并在此事件中触发了更新面板。
所以我要向Channel Partners用户控件添加一个名为NewChannelPartnerCreated的新事件。
public event EventHandler<EventArgs> NewChannelPartnerCreated;
同样对于渠道合作伙伴用户控件,我会在保存已成功完成后附加到保存按钮单击处理程序以引发事件。
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
}
修改预订用户控件以公开刷新下拉列表的公共方法,并调用包装下拉列表的更新面板的更新方法
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事件。事件处理程序只需要调用由Reservation用户控件公开的 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();
}