在执行异步回发页面时会丢失 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("$('#<%=Objective.ClientID%>')
并没有多大作用,因为您不会以这种方式获得正确的 ClientID。使用
sb.Append("$('#" + Objective.ClientID + "').gridviewScroll(height: 500,freezesize: 2,headerrowcount: 2);");
【讨论】:
以上是关于在执行异步回发页面时会丢失 gridviewscroll 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET,使用 .Controls.Add() 添加的控件在页面回发时丢失,如果我使用 .InnerHtml 添加它们,我无法引用它们
GridView 在回发或 onselectedindexchanged 后丢失数据表页眉和页脚