在用户控件中使用LoadControl

本文关键字:LoadControl 用户 控件 | 更新日期: 2023-09-27 18:06:57

这可能属于"我认为你做错了"类别,但我有一个用户控件,其中有javascript,我想动态加载它在更新面板。这样,初始页面加载占用空间很小,但如果用户发出请求,则加载控件(没有异常)。

我发现我的javascript在控件加载时没有被执行。是否有一些魔法使javascript执行,或者它永远不会发生,因为浏览器不会重新解析加载的html标记?

My User Control

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

Firebug显示我的控件的所有代码都在那里,但是javascript没有执行。

请指出我的愚蠢。

在用户控件中使用LoadControl

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

在控件的Page_Load方法中注册您想要执行的脚本,如下所示:

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