这可能属于“我认为你做错了”类别,但是我有一个带有javascript的usercontrol,我想在更新面板中动态加载它。这样初始页面加载占用空间很小,但如果用户发出请求,则加载控件(没有异常)。
我发现加载控件时我的javascript没有被执行。是否有一些魔法使javascript执行,或者它是否会永远不会发生,因为浏览器不会重新解析加载的HTML标签?
我的用户控制
<div>hello</div>
<script type="text/javascript" >
alert('hello');
</script>
Page 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>
Page cs
protected void LoadTheControl(object sender, EventArgs e)
{
MyControl control = (MyControl)LoadControl("~/MyControl.ascx");
control.ID = Guid.NewGuid().ToString();
WantControlHere.Controls.Add(control);
}
Firebug向我显示我控制的所有代码都存在,但是javascript没有执行。
请指出我的愚蠢。
答案 0 :(得分:2)
我认为为了在加载控件后执行javascript,您必须使用ScriptManager.RegisterStartupScript
方法注册它。
在控件的Page_Load
方法中注册您想要执行的脚本,如下所示:
ScriptManager.RegisterStartupScript(this, this.GetType(), "sub", "alert('me');", true);