2011-09-02 98 views
0

母版页有一个ScriptManager。如何从动态添加控件加载JavaScript函数?

然后我得到了一个ScriptManagerProxy和UpdatePanel控件。

在UpdatePanel里面我动态地添加一个Control(也包含一个ScriptManagerProxy),并且从那个控件我需要运行一些JavaScript代码。

DynamicControl.ascx:

<script type="text/javascript"> 
    function doSomething() { 
     alert(1); 
    } 
</script> 

DynamicControl.ascx.cs:

public void Page_Load(object sender, EventArgs e) 
{ 
... 
ScriptManager.RegisterStartupScript(
this.Page, this.GetType(), "scriptID", 
"<script type='text/javascript'>doSomething();</script>", false); 

我的问题是功能 “DoSomething的()” 是从来没有所谓的,我不知道为什么。 :S 编辑:它被调用,但不是直接当我添加控件。

如果我做这样的代码,会出现一个alertwindow:

"<script type='text/javascript'>alert(1);</script>" 

好吧,我想我需要添加一些更多的信息:

是动态添加jQuery的对话框内的控制。我发现javacode先关闭然后打开对话框后执行。触发某种事件,以便代码在那里执行。是否有可能强制这个事件?所以脚本在添加控件时直接执行?

placeHolder.Controls.Add(dynamicReportControl); 

此c#代码不立即执行JavaScript标记?

回答

1

请尝试这样的事情

ScriptManager.RegisterStartupScript(
this.UpdatePanel1, this.UpdatePanel1.GetType(), "scriptID", 
"<script type='text/javascript'>doSomething();</script>", false); 

哪里UpdatePanel1是您的UpdatePanel

0

尝试将addScriptTags参数设置为true,并从代码中删除脚本声明。

该代码只能在每个请求上运行吗?如果是这样,为什么不只是这个代码添加到ASCX:

window.onload = doSomething(); 
+0

我想这也应该工作,但也有一些是那就是阻塞,所以当我关闭并打开我的jQuery对话框时,代码首先在某种事件之后执行。 –