javascript到asp.net的沟通

时间:2010-09-01 10:00:32

标签: javascript asp.net

我有一个使用母版页的网站。在母版页上,我有一个侧边栏div,其中包含一个提供网站导航的Ajax手风琴控件。当用户单击手风琴的链接时,我会传递查询字符串上的窗格索引。每个webform都继承自单个基类。在基类的Page_Load事件中,我检查活动窗格索引的查询字符串,然后设置Accordion.SelectedIndex属性。这可以防止每次用户导航到不同的页面时,手风琴控制都会重置为窗格0。

直接从Accordion控件导航时,上述工作正常。我的问题是,用户也可以从webform导航 - 他们可以单击GridView的'Edit'超链接,将它们带到包含所选记录的DetailsView的页面。在这种情况下,我需要确定“当前”手风琴窗格的索引,以便我可以在包含详细信息视图的webform的页面加载事件上设置它。

我可以使用以下javascript来捕获手风琴的事件:

function pageLoad() {
        var accordion = $find('<%= Accordion1.ClientID %>' + '_AccordionExtender');
        accordion.add_selectedIndexChanged(onACESelectedIndexChanged);
    }
    function onACESelectedIndexChanged(sender, eventArgs) {
        //alert(sender.get_SelectedIndex());
}

我需要将“SelectedIndex”存储在某处,以便包含详细信息视图的webform的page_load事件可以读取它。

我是否需要使用cookies?

由于

罗布。

2 个答案:

答案 0 :(得分:0)

Cookie是一个,但您可以使用HiddenField服务器端控件将值存储在客户端JavaScript中的隐藏元素中,然后访问服务器上的隐藏字段。这是最简单的方法,并适用于这两种选择。您必须使用服务器端控件版本,以便您可以访问服务器上的控件,否则,您必须使用Request.Form集合。

HTH。

答案 1 :(得分:0)

我最终使用了Cookie,这很好用。

我确实玩过隐藏的字段,但发现这有问题,因为我无法始终确定哪些子网页格式已加载。

我已将我添加的代码片段粘贴到我用于子webforms的基类的page_load事件中,以及用于点击accordion控件的javascript。这可能对与我有同样问题的人有所帮助。

的javascript

function pageLoad() {
        var accordion = $find('<%= Accordion1.ClientID %>' + '_AccordionExtender');
        accordion.add_selectedIndexChanged(onACESelectedIndexChanged);
    }
    function onACESelectedIndexChanged(sender, eventArgs) {

        createCookie('acPane', sender.get_SelectedIndex(), 0)

    }
    function createCookie(name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else var expires = "";
        document.cookie = name + "=" + value + expires + "; path=/";
    }

现在是c#

int acPane = 0;
        if (Request.Cookies["acPane"] != null)
        {
            HttpCookie ckAcPane = Request.Cookies["acPane"];
            acPane = Convert.ToInt16(ckAcPane.Value);
        }

        if (acPane >= 0)
        {
            AjaxControlToolkit.Accordion ac;
            ac = (AjaxControlToolkit.Accordion)Master.FindControl("Accordion1");
            ac.SelectedIndex = acPane;
        }