实在不想用UpdatePanel,因为局限性很大,但是想偷懒,就一直用它,最近项目上的一些东西,让我恨透了它,如果没有它,可能早就写完了..
前面说了一些废话,实在是想吐槽UpdatePanel
先说是怎么回事,页面上有用jquery写的一些效果,外面包了一层UpdatePanel,但是每次PostBack后,jquery加上的效果就都不在了,让人非常的郁闷,于是想在UpdatePanel的CallBack完成后,把PostBack前的状态恢复,找了半天,终于找到一个解决办法,记下来,免得以后又悲剧,唉.
还有一种方法就是继承UpdatePanel,重写它的OnPreRender事件,代码如下:
前面说了一些废话,实在是想吐槽UpdatePanel
先说是怎么回事,页面上有用jquery写的一些效果,外面包了一层UpdatePanel,但是每次PostBack后,jquery加上的效果就都不在了,让人非常的郁闷,于是想在UpdatePanel的CallBack完成后,把PostBack前的状态恢复,找了半天,终于找到一个解决办法,记下来,免得以后又悲剧,唉.
$(function(){ method1(); method2(); reload(); }); function reload(){ Sys.WebForms.PageRequestManager.getInstance().add_endRequest(callback); } function callback(){ //do something here... }
public class UpdatePanel:System.Web.UI.UpdatePanel { /// <summary> /// Javascript to be run when the updatepanel has completed updating /// </summary> [Description("Javascript to be run when the updatepanel has completed updating"), Category("Values"), DefaultValue(null), Browsable(true)] public string OnUpdateCompleteClientScript { get { return(string)ViewState["OnUpdateCompleteClientScript"]; } set { ViewState["OnUpdateCompleteClientScript"]= value; } } protected override void OnPreRender(System.EventArgs e) { base.OnPreRender(e); if(!string.IsNullOrEmpty(this.OnUpdateCompleteClientScript)) Page.ClientScript.RegisterStartupScript(this.GetType(),this.ClientID,string.Concat("Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args){for(var panelId in sender._updatePanelClientIDs){if(sender._updatePanelClientIDs[panelId] == '",this.ClientID,"'){",this.OnUpdateCompleteClientScript,"}}});"),true); } }
这个方法我没有测试,有没有用就不晓得了~~~,不过第一个方法是有用的~,嗯,收工,回家吃饭,20:34还在公司,我太牛了,就这样!!!