ASP.NET:使用jQuery手动更新UpdatePanel
我在使用javascript(jQuery)更新ASP:UpdatePanel时遇到了麻烦。 这就是我的意思。
我正在使用隐藏的按钮技巧,因为我似乎无法获得__doPostBack技巧的更新面板的ClientID。
<asp:Button runat="server" ID="btnUpdate" CommandName="Refresh" CommandArgument=''/> ... <a href="javascript:jQuery('#').trigger('click')&&undefined;">Fire!
在处理btnUpdate的代码隐藏中(在GridView RowCommand中),当按下btnUpdate时,rptrEnquiry会反弹。
如果我直接按下按钮(而不是隐藏),一切都很完美(显示更新程序并更新日期并更新转发器。
但是,如果我单击fire link并通过javascript触发按钮,则仅更新日期,但不显示updateprogress,并且转发器不会反弹。 在调试时我可以看到反弹代码被执行但它的效果不在更新中。
好的,所以我通过完全重建整个事情来解决我的问题。 可以帮助其他人的一些经验教训:
我在gridview中有更新面板,当我将updatepanel部分分成一个控件时,我自己的大部分问题都解决了,例如无法引用pnlUpdate。
http://encosia.com/2007/10/24/are-you-making-these-3-common-aspnet-ajax-mistakes/非常有帮助。
更新面板中的更新由其PreRender控制。 通过使用__EVENTTARGET,我们感兴趣的面板就会更新。
protected void pnlUpdate_PreRender(object sender, EventArgs args) { if (Request["__EVENTTARGET"] == pnlUpdate.ClientID) { PreBind(); switch(Request["__EVENTARGUMENT"]) { case "toggle": Toggle(); break; case "purchase": Purchase(); break; case "update": /* nop */ break; } Bind(); } }
要使__EVENTTARGET具有正确的clientId(如果使用按钮,则为空字符串)我需要使用javascript触发面板更新: