也许我有一个大脑屁或什么东西,因为看起来这应该很简单,但你如何通过Ajax从另一个用户控件更新用户控件?
我有一个带有两个用户控件的ASPX页面,当我在一个上面触发服务器端事件时,我想在另一个上刷新一个网格,这样它就会更新它的数据。
如果有帮助,我正在使用Telerik控件。第一个用户控件上的复选框事件导致第二个用户控件中的RadGrid重新绑定(),我在ASPX页面中有RadAjaxManager,在两个用户控件中有RadAjaxManagerProxy。
答案 0 :(得分:2)
首先对我Page.DataBind()
不起作用。
我在UserControl
// Declare a delegate
public delegate void save_CommandEventHandler ();
//Event
save_CommandEventHandler SaveViewChanged public event;
// I run SaveViewChanged() from a click_button but it can run from anywhere
protected void save_Click (object sender, EventArgs e)
{
UpdateDataInDatabase();
SaveViewChanged ();
}
在page.aspx.cs
代码中
protected override void OnInit (EventArgs e)
{
base.OnInit (e);
// UserControle1 is the Id of your UserControl declared in Aspx Page
UserControle1.SaveViewChanged + =
New UserControle.save_CommandEventHandler
(Save_CommandEventHandler);
}
private void save_CommandEventHandler () {
// Reload the gridView gvExpence to see the change operated in the user control
gvExpence.DataSource =DataAcces.getAllCompanyExpence ();
gvExpence.DataBind ();
// update user control 2
usercontrol2.updateView();
}
答案 1 :(得分:1)
异步回调将更新导致回发的控件以及其更新面板的任何父控件。如果在事件发生后没有在浏览器中更新您的数据网格,则表明其更新方法未被调用
尝试在复选框事件
中调用datagrids updatepanel的.update方法答案 2 :(得分:1)
您可以尝试使用AjaxManager的 ajaxRequest 或 ajaxRequestWithTarget 客户端方法来启动ajax调用。有关这些方法的更多信息,请参阅Telerik的在线文档:http://www.telerik.com/help/aspnet-ajax/ajxclientsideapi.html