我有一个名为MyUpdateControl的用户控件,用于触发启动脚本 - 它的HTML只是:
<div id="updatableArea"></div>
启动脚本添加在用户控件的OnLoad()中:
string doUpdateScript = String.Format(
"DoUpdate('{0}')",
someValue);
this.Parent.Page.ClientScript.RegisterStartupScript(typeof(Page), "DoUpdateScript", doUpdateScript);
MyUpdateControl用户控件有时包含在另一个用户控件的更新面板中:
<asp:UpdatePanel ID="myUpdatePanel" runat="server" >
<ContentTemplate>
<UC1:MyUpdateControl ID="myUpdaterControl" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
在这些情况下,只有在首次加载页面时才会触发脚本。它永远不会在异步回发期间触发。如何确保在异步回发期间也调用它?
答案 0 :(得分:1)
在UpdatePanel
而非ClientScript.RegisterStartupScript
内注册脚本时,您需要使用ScriptManager.RegisterStartupScript
。此方法存在重载,需要将注册客户端脚本块的控件作为其第一个参数。
public class MyUpdateControl : Control
{
public MyUpdateControl()
{
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//..
string doUpdateScript = String.Format(
"DoUpdate('{0}')", someValue);
ScriptManager.RegisterStartupScript(this, GetType(),
"ServerControlScript", script, true);
//..
}
}
上面的示例使用自定义控件,我意识到您正在使用用户控件。这两个实现非常相似,但为了完整性,我在下面列举了一个例子。
public partial class MyUpdateControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
//..
string doUpdateScript = String.Format(
"DoUpdate('{0}')", someValue);
ScriptManager.RegisterStartupScript(this, GetType(),
"ServerControlScript", script, true);
//..
}
}