2009-12-03 49 views
0

我有一個用戶控件,名爲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

嘗試的UpdateMode = 「條件」 爲您的UpdatePanel ... – 2009-12-03 03:31:55

回答

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