在执行异步回发页面时会丢失 gridviewscroll 脚本?

Posted

技术标签:

【中文标题】在执行异步回发页面时会丢失 gridviewscroll 脚本?【英文标题】:While doing asynchronous postback page losings gridviewscroll script? 【发布时间】: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);

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

【问题讨论】:

【参考方案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);");

【讨论】:

以上是关于在执行异步回发页面时会丢失 gridviewscroll 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET,使用 .Controls.Add() 添加的控件在页面回发时丢失,如果我使用 .InnerHtml 添加它们,我无法引用它们

在每次 JSF ajax 回发后执行 JavaScript

ASP.NET 回发会丢失 URL 中的哈希值

GridView 在回发或 onselectedindexchanged 后丢失数据表页眉和页脚

webforms 所有执行异步回发的子节点,即使 updatemode 设置为条件

回发后丢失 Bootstrap CSS