c# - 如何注册 Javascript 函数以在每次回发时运行?

标签 c# asp.net javascript postback scriptmanager

我在用户控件中有一个 TreeView 。我需要在每个异步回发中运行一个 javascript 函数,以将它所在的 div 滚动到正确的位置。我已经让它工作了,但我认为必须有一种“更清洁”的方式来做到这一点。在控件的 Page_Load 函数中,我有以下代码。有更好的方法吗?

ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "key" + DateTime.Now.Ticks, "RestorePosition();", true);

为了任何搜索此答案的人的利益,以下是我最终所做的工作。在 ascx 页面的顶部,我有以下代码:


<script type="text/javascript">
    function pageLoad(sender, args) {
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(SavePosition);
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(RestorePosition);
    }

    function SavePosition(sender, args) {
        document.getElementById('hdnScrollSaver').value = document.getElementById('reportTreeViewdiv').scrollTop;
    } 
    function RestorePosition(sender, args) {
        document.getElementById('reportTreeViewdiv').scrollTop = document.getElementById('hdnScrollSaver').value;
    } 

</script>

然后我将 treeview 包裹在一个 div 标签中,如下所示:


<div class="reportTreeView" id="reportTreeViewdiv">
                    <asp:TreeView ID="TreeView1" runat="server" OnTreeNodePopulate="TreeView1_TreeNodePopulate" 
                        OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" PathSeparator="|" SkinID="ReportTreeView" />
                </div>

希望这对某人有帮助。

最佳答案

Ajax 为您提供类似于 ASP.Net 页面的页面生命周期,但在客户端。因此,在 pageLoad 事件中,我们可以连接要在每个开始请求和结束请求上调用的函数。

function pageLoad(sender, args) {
  Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
}

function beginRequest(sender, args) {
        // begin request code - i.e. make a "processing" div visible
}

function endRequest(sender, args) {
        // we are back
        RestorePosition(); 
}

关于c# - 如何注册 Javascript 函数以在每次回发时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463021/

相关文章:

c# - PowerBI 和 Azure AD headless 登录

c# - 在 C# 代码中启用引导选项卡

c# - C#中基于向导控件的ActiveStepIndex修改QueryString

php - 在javascript中访问列表元素

javascript - Javascript 中的 HTML 行 Controller

javascript - 在 JavaScript 中验证 11 位数字

c# - 可以在 Java 中使用 C# 样式的对象初始化吗?

c# - 我如何开始编写 Windows Shell 扩展?

c# - 我们可以排除 ADO.Net 实体数据模型中 ToList() 方法中的特定记录吗?

asp.net - 检测到 ASP.NET 网页版本冲突 : specified version is "1.0.0.0",,但 bin 中的版本为 "2.0.0.0"