2012-02-25 59 views
0

我有一個.NET 4的網頁,其中包含一個用戶控件有以下:

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> 
</asp:ScriptManagerProxy> 
<asp:LinkButton ID="btnExpand" runat="server" Text="Expand..." ClientIDMode="AutoID" 
    OnClick="btnExpand_Click"></asp:LinkButton> 
<asp:Label ID="btnDummy" runat="server"></asp:Label> 
<asp:Panel ID="pnlMyPanel" runat="server"> 
    <p>content</p> 
</asp:Panel> 
<ajaxToolkit:CollapsiblePanelExtender ID="cpeMyPanel" runat="server" 
    TargetControlID="pnlMyPanel" Collapsed="True" ExpandControlID="btnDummy" 
    CollapseControlID="btnDummy" BehaviorID="cpe"> 
</ajaxToolkit:CollapsiblePanelExtender> 

當點擊展開按鈕,它執行以下代碼:

protected void btnAddComment_Click(object sender, EventArgs e) 
{ 
    string script = "var cpeMyPanel = $find('" + cpeMyPanel.BehaviorID + "');\r\n" + 
        "if (cpeMyPanel != null)\r\n" + 
        " cpeMyPanel.expandPanel();\r\n" + 
        "else\r\n" + 
        " alert(cpeMyPanel is null');"; 
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), 
      "Expand", script, true); 
} 

當腳本在瀏覽器上運行時,我得到警報,但是$ find()總是返回null。最終目標是,當用戶單擊按鈕時,我想在擴展面板之前在服務器上執行一些代碼(例如準備一些內容)。

任何想法可能會失蹤?有一個更好的方法嗎?

由於提前,

回答

1

的的RegisterStartupScript在客戶端構建面板之前執行(搜索$頁面創建功能)。目標是在客戶端實例化所有組件時推遲腳本的執行。 AJAX控件工具包使用此trick

(function() { 
    var fn = function() { 
     var ajaxControl = $find('AJAX control'); 
     // do something usefull 
    }; 

    Sys.Application.add_load(fn); 
})(); 

我有一個AJAX工具包,但最有可能出現的是,照顧有關腳本註冊了一些輔助方法沒有經驗。我會從ToolkitScriptManager開始。

看到這個blog post當你感興趣爲什麼這樣一個複雜的解決方案是如此簡單的任務需要:)。