$ find RegisterStartupScript中的CollapsiblePanelExtender返回null

时间:2012-02-25 09:00:44

标签: javascript asp.net collapsiblepanelextender

我有一个包含用户控件的.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 个答案:

答案 0 :(得分:1)

RegisterStartupScript在客户端构建面板之前执行(在页面中搜索$ create function)。目标是将脚本的执行推迟到在客户端实例化所有组件的时候。 AJAX Control Toolkit使用此trick

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

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

我没有使用AJAX Toolkit的经验,但很可能有一些帮助脚本注册的帮助方法。我将从ToolkitScriptManager开始。

当您感兴趣为什么需要这样一个复杂的解决方案时,请参阅此blog post:)。

相关问题