javascript - UpdatePanel 更新时未调用 Sys.Application.add_init

标签 javascript ajax asp.net-ajax updatepanel

我有一个自定义 UI 控件,它有一个围绕 AJAX.NET 框架编写的 JavaScript 类。它继承自 Sys.UI.Control。该控件本身是一个 UserControl。在 render 方法中,我将控件包装在一个跨度中,并为跨度的 ID 提供用户控件的 ClientID。这样我以后就可以这样做:

var control = $find('<%= ServerControlID.ClientID %>');

这允许我获取表示 UI 控件的客户端对象。

我通过这样做(也在渲染方法中)在 Javascript 中创建控件

writer.Write(@"<script type='text/javascript'>
Sys.Application.add_init(function() {
debugger;
    $create(General.Filters.AccountGroupFilter,
        " + GetProperties() + @",
        null,
        null,
        $get('" + this.ClientID + @"'));
});
</script>");

这将创建对象。它是在生命周期的 init 事件中完成的。

问题在于此控件被消费页面/控件包装在 UpdatePanel 中。当另一个控件启动更新时,所有控件的 UI 都会重绘,但 init 事件永远不会再次触发。

当我这样做时会发生什么:

var control = $find('<%= ServerControlID.ClientID %>');
if(control != null)
  control.doSomething();

没有任何反应,因为 $find 在 AJAX 调用后没有找到控件。我知道我没有正确地这样做。我哪里错了。有关这些内容的 MSDN 文章让我陷入困境!

编辑:我想我会在 UserControl.cs 部分包含我正在做的 Render 方法

    protected override void Render(HtmlTextWriter writer)
    {
        writer.Write("<span id=\"" + this.ClientID + "\" >");
        writer.Write(@"<script type='text/javascript'>
        Sys.Application.add_init(function() {

        $create(TradePMR.OMS.Resources.UserControls.General.Filters.AccountGroupFilter,
        " + GetProperties() + @",
        null,
        null,
        $get('" + this.ClientID + @"'));
        });
        </script>");

        base.Render(writer);
        writer.WriteEndTag("span");
    }

最佳答案

您不需要自己编写所有 Sys.Application.add_init 东西;根据 this MSDN article 实现 IScriptControl .

关键是关于 RegisterScriptControlRegisterScriptDescriptors 的部分,它将您的控件注册到 ScriptManager 以便异步回发将重新创建您的客户端必要时进行控制。

作为脚注,有一个 seperate but similar article here如果您正在实现 Sys.UI.Behavior

关于javascript - UpdatePanel 更新时未调用 Sys.Application.add_init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3639560/

相关文章:

jquery - 奇怪的 cakePHP 布局问题(ajax)

javascript - 如何将ajax数据传递给react中的组件

javascript - Typescript - 存储静态全局变量并通过键检索?

javascript - 更改按钮值 Angular 7

javascript - Shiny 应用程序内的 Google 街景容器

javascript - ajax调用后表消失了

javascript - 为什么我得到日志未定义

css - 更新面板 Controller 显示问题

asp.net - 从代码隐藏文件创建 JSON 数组

asp.net - 使用 asp.net 表单例份验证,因此只有登录用户才能查看网站