我有一个使用母版页的网站。在母版页上,我有一个侧边栏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?
由于
罗布。
答案 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;
}