Ajax Accordion控制項中如何控制回傳回來時仍然顯示剛才選中的項
在使用Accordion控制項時,回傳回來時總是顯示第一項。當不同使用者顯示不同的項時,如何控制回傳回來後仍然選中剛才點擊的項目。
下邊是解決方案。
1)我們將每個aspx頁面的所在項目的檔案夾名與對應的AccordionPane的ID儲存起來。此步的目的主要是通目aspx所在檔案夾名找到AccordionPane
2)回傳回來後根據URL路徑中的檔案夾名稱與剛剛儲存的值作比對。然後顯示相應的項。
列子如下:
1) aspx頁面添加Accordion控制項,其源碼摘要如下:
專案檔夾如:
2) 將每個aspx頁面所在專案檔夾名與AccordionPane ID對應,並儲存。
//定義菜單列表
private static IDictionary<string, string> _MenuList { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
/*
菜單列表格式為<檔案夾目錄名,AccordionPane ID>
如下邊的workflowdesigner檔案夾對應ID為apWorkflow的AccordionPane
*/
_MenuList = new Dictionary<string, string>() {
{ "workflowdesigner", "apWorkflow" },
{ "reporting", "apReporting" },
{ "businessmanager", "apBusiness" },
{ "message","apMessage" },
{ "organizationmanager", "apOrgnization" },
{ "systemlog","apSystemLog"},
{"modulemanagemanet","apModule"}
};
SetMenueActiveIndex();
}
3)通過URL路徑得到檔案夾名,對通過比對,找出要選中的項。
/// <summary>
/// 設定當前選中項
/// </summary>
private void SetMenueActiveIndex()
{
string currentPage = GetCurrentUrl();
if (!string.IsNullOrEmpty(currentPage))
{
string currentPageLower = currentPage.ToLower();
if (_MenuList.Keys.Contains(currentPageLower))
{
//記錄index
int index = -1;
foreach (var item in mainMenue.Panes)
{
//判斷是否已顯示
if (item.Visible == true)
{
index++;
if (item.ID.ToLower() == _MenuList[currentPageLower].ToLower())
{
//設定需要顯示的項
mainMenue.SelectedIndex = index;
break;
}
}
}
}
}
}
/// <summary>
/// 根據當前連結,得到頁面所在的目錄名
/// </summary>
/// <returns></returns>
private string GetCurrentUrl()
{
string resultString = "";
string[] splitList = Request.Url.AbsolutePath.Split('/');
if (splitList.Length > 2)
{
if (!string.IsNullOrEmpty(splitList[splitList.Length - 2]))
{
resultString = splitList[splitList.Length - 2];
}
}
return resultString;
}