1

我有一个使用 2 个用户控件的页面。一种控制是预订控制,另一种是渠道合作伙伴控制。在预订控制上,我有一个包含所有渠道合作伙伴的下拉菜单。当用户有新的渠道合作伙伴时,他单击 AddNewChannel 链接,渠道合作伙伴会弹出,然后用户将新的渠道合作伙伴插入数据库。现在我的问题是,将数据插入数据库时​​,我希望刷新预订下拉菜单,并且应该包含新的渠道合作伙伴。我试过这样:

UpdatePanel upnl = (UpdatePanel)Page.FindControl("UpdatePanel1");

if (upnl != null)
    upnl.Update();

我在更新面板中的预订控制下拉菜单。但它没有用。任何尝试帮助将不胜感激。

4

2 回答 2

0

Anser 将使用模型弹出窗口的卸载方法并从那里更新。没有从这个社区得到任何答案感到很失望......

于 2013-05-14T07:25:54.980 回答
0

假设:渠道合作伙伴用户控件包含添加新合作伙伴的弹出窗口。弹出窗口有一个保存按钮(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

于 2013-05-15T09:20:29.417 回答