2011-08-29 77 views
0

这可能属于“我认为你做错了”类别,但我有一个用户控件,它里面有javascript,我想动态地将它加载到更新面板中。这是因为初始页面加载占用空间很小,但是如果用户发出请求,则加载控件(没有什么不寻常的)。使用LoadControl进行javascript控制的用户控件

我发现我的JavaScript没有被执行时控件加载。是否有一些神奇的东西让JavaScript执行,还是永远不会发生,因为浏览器不会重新解析加载的标签的HTML?

我的用户控制

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

页ASCX

<asp:Button OnClick="LoadTheControl" runat="server">Click to Load</asp:Button> 
<asp:UpdatePanel ID="myUPanel" runat="server"> 
    <asp:PlaceHolder ID="WantControlHere" runat="server" /> 
    <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="LoadTheControl" /> 
    </Triggers> 
</asp:UpdatePanel> 

页CS

protected void LoadTheControl(object sender, EventArgs e) 
{ 
    MyControl control = (MyControl)LoadControl("~/MyControl.ascx"); 
    control.ID = Guid.NewGuid().ToString(); 
    WantControlHere.Controls.Add(control); 
} 

萤火显示了我控制的所有代码是存在的,但JavaScript的是不执行。

请指出我的愚蠢。

回答

2

我想为了执行JavaScript一旦你的控件加载,你必须使用ScriptManager.RegisterStartupScript方法注册它。

内部控件的Page_Load方法注册脚本您要执行这样的:

ScriptManager.RegisterStartupScript(this, this.GetType(), "sub", "alert('me');", true);