【问题标题】:While doing asynchronous postback page losings gridviewscroll script?在执行异步回发页面时会丢失 gridviewscroll 脚本?
【发布时间】:2018-08-17 17:02:55
【问题描述】:

在执行异步回发页面时,即使我在后面的代码上注册了脚本,也会丢失 gridviewscroll 脚本。 (我在更新面板中有网格。在 asp.net 网格视图中单击“添加新行”时会发生这种情况。)

我尝试了以下三种方法。

ScriptManager.RegisterStartupScript(UpdatePanel_Objective, this.GetType(), UpdatePanel_Objective.UniqueID, "gridviewScroll();", true);

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "script", "gridviewScroll();", true);

StringBuilder sb = new StringBuilder();
sb.Append("<script src='js/jquery-1.11.1.min.js'></script>");
sb.Append("<script src='js/jquery-ui.min.js'></script>");
sb.Append("<script src='js/gridviewScroll.min.js'></script>");
sb.Append("<script src='js/gridviewScroll.js'></script>");
sb.Append("<script type = 'text/javascript'>");
sb.Append("$('#<%=Objective.ClientID%>').gridviewScroll({height: 500,freezesize: 2,headerrowcount: 2});");
sb.Append("</script>");
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "script", sb.ToString(), true);

以上都不起作用。请指教。谢谢。

【问题讨论】:

    标签: jquery asp.net gridview updatepanel postback


    【解决方案1】:

    您需要再次触发gridviewScroll,即使在异步回发之后也是如此。即使您没有看到它,UI 也会更新,并且所有使用 jQuery 进行的绑定都会丢失并且必须重新绑定。所以请使用EndRequest 功能。

    <script type="text/javascript">
        var prm = Sys.WebForms.PageRequestManager.getInstance();
    
        prm.add_endRequest(function () {
            createGridviewScroll()
        });
    
        $(document).ready(function () {
            createGridviewScroll();
        });
    
        function createGridviewScroll() {
            //do your thing
        }
    </script>
    

    PS 这样做sb.Append("$('#&lt;%=Objective.ClientID%&gt;') 并没有多大作用,因为您不会以这种方式获得正确的 ClientID。使用

    sb.Append("$('#" + Objective.ClientID + "').gridviewScroll({height: 500,freezesize: 2,headerrowcount: 2});");
    

    【讨论】: