在回发后保持当前Jquery手风琴窗格打开

时间:2013-12-03 20:46:10

标签: c# jquery asp.net

再次,我。 这次我试图在回发后保持当前的JQuery手风琴窗格打开。我跟着这个例子:Keep the current jQuery accordion pane open after ASP.NET postback?除了我见过的其他几个人。我仍然无法让它工作,与我的唯一区别是我正在通过我的代码制定脚本并推送给客户。

这就是我所拥有的:

    public static string getAccordionContainerScript(string container)
    {
        return @"$(document).ready(function() { var activeIndex = parseInt($('#<%=accordionActiveIndex.ClientID %>').val()); $(" + '"' + '#' + container + '"' + ").accordion({collapsible: true, heightStyle: \"content\", navigation: true,change: function (event, ui) { var index = $(this).accordion(\"option\", \"active\");$('#<%=accordionActiveIndex.ClientID %>').val(index);} }).show(); })";
    }

我这样做的原因是因为我正在重复使用代码块,因为我在整个应用程序中有几个相同的控件。

另外,当我使用标记显示表达式(&lt;%= =&gt;)时,它会抛出客户端错误而我的其他客户端控件不起作用,例如我的模态等。

客户端错误是:未捕获错误:语法错误,无法识别的表达式:#&lt;%= accordionActiveIndex.ClientID%&gt;

我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

您的错误信息确切地说错了:

您正在向响应中发送字符串<%=accordionActiveIndex.ClientID %>。该字符串必须由WebForms引擎处理,因此它必须位于aspx页面中。浏览器不知道如何处理该代码,这就是浏览器抛出该错误的原因。

我担心你需要传递给该函数的accordionActiveIndex.ClientID值,所以你可以这样做(注意新参数,同时忽略字符串中的换行符。我添加了易读性:

public static string getAccordionContainerScript(string container, string clientId)
{
    return string.Format(@"$(document).ready(function() { var activeIndex = parseInt($('#<%=accordionActiveIndex.ClientID %>').val()); 
                           $(" + '"' + '#' + container + '"' + ").accordion({collapsible: true, heightStyle: \"content\", navigation: true,change: function (event, ui) { var index = $(this).accordion(\"option\", \"active\");
                           // pay attention here
                           $('#{0}').val(index);} }).show(); }), clientId);
}