【发布时间】:2009-05-27 17:00:17
【问题描述】:
我有一个以编程方式创建的 gridview 按钮,我想在客户端加载一个带有发送数据的更新面板。我有一个隐藏的值字段,通过单击 gridview 按钮获取其数据,并且我的更新面板中的下拉列表取决于该值。
【问题讨论】:
标签: asp.net javascript vb.net visual-studio-2008 updatepanel
我有一个以编程方式创建的 gridview 按钮,我想在客户端加载一个带有发送数据的更新面板。我有一个隐藏的值字段,通过单击 gridview 按钮获取其数据,并且我的更新面板中的下拉列表取决于该值。
【问题讨论】:
标签: asp.net javascript vb.net visual-studio-2008 updatepanel
虽然直接调用 __doPostBack 会起作用,但这并不是一个完美的解决方案,因为该函数的名称严格来说是 .Net 框架的实现细节。
更好的解决方案是使用ClientScriptManager.GetPostBackEventReference,它为您提供了对相同功能的更具弹性的界面。请注意,GetPostBackEventReference 和 GetCallBackEventReference 不是一回事 - 前者会导致页面重新加载(部分或全部,取决于您的 UpdatePanel 的设置方式),而后者不会。
【讨论】:
最简单的方法是从客户端调用 __doPostBack。
在客户端 button1_onclick 方法,调用:
__doPostBack('<%=UpdatePanel1.ClientID %>','Refresh:0,1,2'); //refresh update panel
在页面后面添加以下事件处理程序以捕获回发调用:
protected void UpdatePanel1_Load(object sender, EventArgs e)
{
string arg = Request.Form["__EVENTARGUMENT"];
if (string.IsNullOrEmpty(arg)) return;
if (arg.StartWith("Refresh")
{
//parse data first then do your thing here...
}
}
当然不要忘记将事件连接到上述方法:
protected void Page_Init(object sender, EventArgs e)
{
UpdatePanel1.Load += new EventHandler(UpdatePanel1_Load);
}
【讨论】:
我们使用 __dopostback() 方法来模拟回发并导致更新面板刷新
__doPostBack('controlName','');
不要忘记控件名称是它的 HTML ID(很可能包含美元等),而不仅仅是它的 ASP.NET ID。
据我所知,您可以调用此方法并传入隐藏值字段或它所在的 div。
【讨论】: