Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新面板更新时未调用Sys.Application.add_init_Javascript_Ajax_Asp.net Ajax_Updatepanel - Fatal编程技术网

Javascript 更新面板更新时未调用Sys.Application.add_init

Javascript 更新面板更新时未调用Sys.Application.add_init,javascript,ajax,asp.net-ajax,updatepanel,Javascript,Ajax,Asp.net Ajax,Updatepanel,我有一个自定义UI控件,它有一个围绕AJAX.NET框架编写的JavaScript类。它继承自Sys.UI.Control。控件本身是一个UserControl。在render方法中,我将控件包装在一个span中,并为span的id指定用户控件的ClientID。这样,我可以在以后执行此操作: var control = $find('<%= ServerControlID.ClientID %>'); var-control=$find(“”); 这允许我获取表示UI控件的客户

我有一个自定义UI控件,它有一个围绕AJAX.NET框架编写的JavaScript类。它继承自Sys.UI.Control。控件本身是一个UserControl。在render方法中,我将控件包装在一个span中,并为span的id指定用户控件的ClientID。这样,我可以在以后执行此操作:

var control = $find('<%= ServerControlID.ClientID %>');
var-control=$find(“”);
这允许我获取表示UI控件的客户端对象

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

writer.Write(@)
Sys.Application.add_init(函数(){
调试器;
$create(General.Filters.AccountGroupFilter,
“+GetProperties()+@”,
无效的
无效的
$get(“+this.ClientID+@”);
});
");
这将创建对象。它是在生命周期的init事件中完成的

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

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

var control = $find('<%= ServerControlID.ClientID %>');
if(control != null)
  control.doSomething();
var-control=$find(“”);
if(控件!=null)
对照组:doSomething();
因为$find在AJAX调用后找不到控件,所以不会发生任何事情。我知道我做得不对。我哪里做错了。MSDN关于这方面的文章让我陷入了困境

编辑:我想我应该在UserControl.cs部分包含我正在执行的渲染方法

    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");
    }
受保护的覆盖无效渲染(HtmlTextWriter)
{
作者:写(“”);
writer.Write(@)
Sys.Application.add_init(函数(){
$create(TradePMR.OMS.Resources.UserControls.General.Filters.AccountGroupFilter,
“+GetProperties()+@”,
无效的
无效的
$get(“+this.ClientID+@”);
});
");
base.Render(writer);
writer.WriteEndTag(“span”);
}

你不需要自己编写所有的
Sys.Application.add_init
东西;按照执行
IScriptControl

关键是关于
RegisterScriptControl
RegisterScriptDescriptor
的部分,它将控件注册到
ScriptManager
,以便异步回发将根据需要重新创建客户端控件


作为一个脚注,如果您正在实现
Sys.UI.Behavior

您不需要自己编写所有
Sys.Application.add_init
内容;按照执行
IScriptControl

关键是关于
RegisterScriptControl
RegisterScriptDescriptor
的部分,它将控件注册到
ScriptManager
,以便异步回发将根据需要重新创建客户端控件

作为一个脚注,如果您正在实现
Sys.UI.Behavior
,则会出现一个错误

    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");
    }