gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:48:27 25 4
gpt4 key购买 nike

我有一个自定义 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com