加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在我的UpdatePanel完成加载DOM元素后,如何从我的代码

发布时间:2020-12-16 09:33:18 所属栏目:asp.Net 来源:网络整理
导读:我有一个带有转发器的UpdatePanel,在用户通过模式弹出窗口向其添加项目后重新绑定. 当他们单击按钮向转发器添加新行时,代码隐藏看起来像这样: protected void lbtnAddOption_Click(object sender,EventArgs e){ SelectedOption = new Option() { Account =
我有一个带有转发器的UpdatePanel,在用户通过模式弹出窗口向其添加项目后重新绑定.

当他们单击按钮向转发器添加新行时,代码隐藏看起来像这样:

protected void lbtnAddOption_Click(object sender,EventArgs e)
{               
    SelectedOption = new Option()
    {
        Account = txtAddOptionAccountNumber.Text,Margin = chkAddOptionMargin.Checked,Symbol = txtAddOptionSymbol.Text,Usymbol = txtAddOptionUsymbol.Text,};

     Presenter.OnAddOption(); // Insert the new item
     RefreshOptions(); // Pull down and re-bind all the items
     mpeAddOptionDialog.Hide(); // Hide the modal 

     // ... Make call to jQuery scrollTo() method here?

}

这很好用,新行将通过UpdatePanel快速显示.

但是,通常会有数百行,并且添加新行的行基于当前使用的排序列.

所以,我想把它作为使用甜蜜jQuery ScrollTo plugin的机会.我知道如果我给它溢出的容器div的ID和其中元素的ID,它将平滑地直接滚动到用户新添加的行.

但是,有两个问题:

>我需要找到合适的行,这样我才能抓住ClientID.
>我需要从我的代码隐藏执行jQuery代码段,这将导致我新更新的转发器滚动到右侧行.

我已经解决了#1.我有一个可靠的方法,将产生新添加的行的ClientID.

然而,问题#2被证明是棘手的.我知道我可以调用ScriptManager.RegisterStartupScript()构成我的代码隐藏,它将在我的页面上执行JavaScript.

我遇到的问题是它似乎正在执行那段JavaScript(我猜)新刷新的DOM元素已经完全加载.所以,即使我传入适当的jQuery行来滚动到我想要的元素,它对我来说也是错误的,因为它还找不到那个元素.

这是我在上面发布的方法结尾处使用的行:

string clientID = getClientIdOfNewRow();  
     ScriptManager.RegisterStartupScript(this,typeof(Page),"ScrollScript",String.Format("$("#optionContainer").scrollTo("{0}",800);",clientID),true);

我需要做什么才能确保在具有UpdatePanel的页面真正准备好之前不会调用这一行JavaScript?

解决方法

如果你需要处理的东西在更新面板中,那么你需要在加载面板后运行你的JS.我使用add_endRequest.以下内容是从更复杂的东西入侵的.它在文档就绪时运行一次,但安装了“end ajax”处理程序,每次更新更新面板时都会触发该处理程序.当它发射时,它就在你身边.

var prm = Sys.WebForms.PageRequestManager.getInstance();
jQuery(document).ready(function () {
    prm.add_endRequest(EndRequestHandler);
});

function EndRequestHandler(sender,args) {
  // do whatever you need to do with the stuff in the update panel.
}

显然,如果你愿意,你可以从代码隐藏中注入它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读