Aug 25, 2010, 5:41 PM
Panel in MasterPage, Dynamic generate Accordion in Panel and Save state for this Colapse and expand in Session?
Title:Panel in MasterPage, Dynamic generate Accordion in Panel and Save state for this Colapse and expand in Session?
i test two weeks for this.
(english is so poor!! sorry.)
it's sample like below code, my QUESTION is the session has delay display the state in accross page.
please help me to solve it! how can i write code to display the selected-state on click MenuItem , and After cross-page action , it can display layout for i click the location , but it delay to display the previous click-one-time Session Value.
PS:
1. localhost test is not delay, please test on other ip(other computer and browser)
2. version: Coolite Toolkit for ASP.NET 0.8.2.983 (Coolite.Ext.Web.dll)
the sample is ok to dynamic generate the tree-like(outlook-like Display Layout)
Master.Page:aspx code
MenuInMasterPage01.aspx:
i test two weeks for this.
(english is so poor!! sorry.)
it's sample like below code, my QUESTION is the session has delay display the state in accross page.
please help me to solve it! how can i write code to display the selected-state on click MenuItem , and After cross-page action , it can display layout for i click the location , but it delay to display the previous click-one-time Session Value.
PS:
1. localhost test is not delay, please test on other ip(other computer and browser)
2. version: Coolite Toolkit for ASP.NET 0.8.2.983 (Coolite.Ext.Web.dll)
the sample is ok to dynamic generate the tree-like(outlook-like Display Layout)
Master.Page:aspx code
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Master2.master.cs" Inherits="Coolite_Sample_001.Master2" %>
<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>title</title>
</head>
<body>
<form id="form1" runat="server">
<ext:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<ext:Panel ID="Panel1" runat="server" Collapsible="True" Height="800" Title="Sample_DynamicItem">
<body>
<ext:Panel ID="pnlTreePanel" runat="server" Height="700" Collapsible="true">
<body>
</body>
</ext:Panel>
</Body>
</ext:Panel>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
<script language = "javascript">
function asscesslog(num1, num2, num3, selectText, menutype)
{
//alert('num1:'+num1);
//alert('num2:'+num2);
//alert('num3:'+num3);
//alert('selectText:'+selectText);
//alert('menutype:'+menutype);
Coolite.AjaxMethods.FHG.SaveLog(num1,num2, num3, selectText, menutype, {
success: function (result){
},
failure: function (result){
}
});
}
</script>
Master.Page:aspx.cs codeusing System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Coolite.Ext.Web;
namespace Coolite_Sample_001
{
[AjaxMethodProxyID(IDMode = AjaxMethodProxyIDMode.Alias, Alias = "FHG")]
public partial class Master2 : System.Web.UI.MasterPage
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.CreateMenuTree(); // it's ok!!
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//this.CreateMenuTree(); // it's ok!!
}
}
#region Data
protected Boolean IsSubMenu(string iMaster)
{
Boolean isHaveSub = false;
string strRel = "";
int iSubMenuCount = 0;
strRel = this.GetMasterSubMenuRelation();
string[] sSubMenuList = strRel.Split(',');
if (strRel == "") return isHaveSub;
iSubMenuCount = sSubMenuList.Length / 2;
string[] sSubMenuIndex = new string[iSubMenuCount];
string[] sSubMenuFlag = new string[iSubMenuCount];
for (int i = 0; i < iSubMenuCount; i++)
{
sSubMenuIndex.SetValue(sSubMenuList[2 * i], i);
sSubMenuFlag.SetValue(sSubMenuList[2 * i + 1], i);
}
if (sSubMenuFlag.GetValue(Convert.ToInt32(iMaster)).ToString() == "1") isHaveSub = true;
return isHaveSub;
}
protected string GetMasterSubMenuRelation()
{
//string strRelList = "Menu1,0,Menu2,1,Menu3,0,Menu4,0,Menu5,1,Menu6,1"; //the same below.
string strRelList = "0,0,1,1,2,0,3,0,4,1,5,1";
return strRelList;
}
/// <summary>
/// MasterMenu
/// </summary>
/// <returns></returns>
protected string GetMenuData()
{
string strList = "Menu1,0,Menu2,1,Menu3,2,Menu4,3,Menu5,4,Menu6,5";
return strList;
}
/// <summary>
/// SubMenu
/// </summary>
/// <param name="iMIndex">Main Menu Index</param>
/// <returns></returns>
protected string GetSubMenuData(string iMIndex)
{
string strSubList = "";
switch (iMIndex)
{
case "0":
strSubList = "";
break;
case "1":
strSubList = "Menu2_1,0,Menu2_2,1,Menu2_3,2";
break;
case "2":
strSubList = "";
break;
case "3":
strSubList = "";
break;
case "4":
strSubList = "Menu5_1,0,Menu5_2,1";
break;
case "5":
strSubList = "Menu6_1,0,Menu6_2,1,Menu6_3,2,Menu6_4,3,Menu6_5,4";
break;
}
return strSubList;
}
/// <summary>
/// every MenuPanel's MenuItem
/// </summary>
/// <param name="iMIndex">Main Menu Index</param>
/// <param name="iSIndex">Sub Menu Index</param>
/// <returns></returns>
protected string GetMenuItem(string iMIndex, string iSIndex)
{
string strMenuItemList = "";
switch (iMIndex)
{
case "0":
switch (iSIndex)
{
case "0":
strMenuItemList = "MenuItem1_1,0,MenuInMasterPage01.aspx,MenuItem1_2,1,MenuInMasterPage02.aspx";
break;
}
break;
case "1":
switch (iSIndex)
{
case "0":
strMenuItemList = "MenuItem2_1_1,0,MenuInMasterPage03.aspx,MenuItem2_1_2,1,MenuInMasterPage04.aspx";
break;
case "1":
strMenuItemList = "MenuItem2_2_1,0,MenuInMasterPage05.aspx";
break;
case "2":
strMenuItemList = "MenuItem2_3_1,0,MenuInMasterPage06.aspx,MenuItem2_3_2,1,MenuInMasterPage07.aspx,MenuItem2_3_3,2,MenuInMasterPage01.aspx";
break;
}
break;
case "2":
switch (iSIndex)
{
case "0":
strMenuItemList = "MenuItem3_1,0,MenuInMasterPage02.aspx,MenuItem3_2,1,MenuInMasterPage03.aspx,MenuItem3_3,2,MenuInMasterPage04.aspx,MenuItem3_4,3,MenuInMasterPage05.aspx";
break;
}
break;
case "3":
switch (iSIndex)
{
case "0":
strMenuItemList = "MenuItem4_1,0,MenuInMasterPage06.aspx";
break;
}
break;
case "4":
switch (iSIndex)
{
case "0":
strMenuItemList = "MenuItem5_1_1,0,MenuInMasterPage07.aspx,MenuItem5_1_2,1,MenuInMasterPage01.aspx,MenuItem5_1_3,2,MenuInMasterPage02.aspx";
break;
case "1":
strMenuItemList = "MenuItem5_2_1,0,MenuInMasterPage03.aspx,MenuItem5_2_2,1,MenuInMasterPage04.aspx,MenuItem5_2_3,2,MenuInMasterPage05.aspx,MenuItem5_2_4,3,MenuInMasterPage06.aspx,MenuItem5_2_5,4,MenuInMasterPage07.aspx";
break;
}
break;
case "5":
switch (iSIndex)
{
case "0":
strMenuItemList = "MenuItem6_1_1,0,MenuInMasterPage01.aspx,MenuItem6_1_2,1,MenuInMasterPage02.aspx,MenuItem6_1_3,2,MenuInMasterPage03.aspx,MenuItem6_1_4,3,MenuInMasterPage04.aspx,MenuItem6_1_5,4,MenuInMasterPage05.aspx,MenuItem6_1_6,5,MenuInMasterPage06.aspx,MenuItem6_1_7,6,MenuInMasterPage07.aspx";
break;
case "1":
strMenuItemList = "MenuItem6_2_1,0,MenuInMasterPage01.aspx,MenuItem6_2_2,1,MenuInMasterPage02.aspx";
break;
case "2":
strMenuItemList = "MenuItem6_3_1,0,MenuInMasterPage03.aspx";
break;
case "3":
strMenuItemList = "MenuItem6_4_1,0,MenuInMasterPage04.aspx,MenuItem6_4_2,1,MenuInMasterPage05.aspx,MenuItem6_4_3,2,MenuInMasterPage06.aspx";
break;
case "4":
strMenuItemList = "MenuItem6_5_1,0,MenuInMasterPage07.aspx,MenuItem6_5_2,1,MenuInMasterPage01.aspx";
break;
}
break;
}
return strMenuItemList;
}
#endregion --Data
protected void CreateMenuTree()
{
#region [Dynamic Generate Menu]
#region "prepare Master Menu setting"
string strMenu = "";
int iMenuCount = 0;
strMenu = this.GetMenuData();
string [] sMenuList = strMenu.Split(',');
if (strMenu == "") return;
iMenuCount = sMenuList.Length / 2;
string[] sMenuNme = new string[iMenuCount];
string[] sMenuIndex = new string[iMenuCount];
//Master Menu Setting
for (int i = 0; i < iMenuCount; i++)
{
sMenuNme.SetValue(sMenuList[2 * i], i);
sMenuIndex.SetValue(sMenuList[2 * i + 1], i);
}
#endregion --"prepare Master Menu setting"
#region "declare Dynamic Generate Control"
Coolite.Ext.Web.Panel pl2 = new Coolite.Ext.Web.Panel(); // have SubMenu, every MasterMenu to new a object.MasterMenu must be Panel.
Coolite.Ext.Web.Menu mn = new Coolite.Ext.Web.Menu();
MenuPanel mpl = new MenuPanel();
Coolite.Ext.Web.MenuItem mi = new Coolite.Ext.Web.MenuItem();
Coolite.Ext.Web.Accordion Accordion1 = new Coolite.Ext.Web.Accordion(); // Top level is Accordion
Coolite.Ext.Web.Accordion Accordion2 = null;
#endregion --"declare Dynamic Generate Control"
for (int i = 0; i < iMenuCount; i++)
{
if (!IsSubMenu(sMenuIndex[i]))
{//no SubMenu
#region "no SubMenu"
string strMenuItem = "";
int iMenuItemCount = 0;
strMenuItem = GetMenuItem(i.ToString(), "0");
string [] sMenuItemList = strMenuItem.Split(',');
if (strMenuItem == "") break;
iMenuItemCount = sMenuItemList.Length / 3;
string[] sMenuItemNme = new string[iMenuItemCount];
string[] sMenuItemIndex = new string[iMenuItemCount];
string[] sMenuItemHref = new string[iMenuItemCount];
//pl2 = new Coolite.Ext.Web.Panel();
mpl = new Coolite.Ext.Web.MenuPanel();
mpl.Title = sMenuNme.GetValue(i).ToString();
mpl.Collapsible = true;
mpl.AutoHeight = true;
mpl.Collapsed = true; // Collapse MenuPanel
//if (i == 4)
for (int j = 0; j < iMenuItemCount; j++)
{
sMenuItemNme.SetValue(sMenuItemList[3 * j], j);
sMenuItemIndex.SetValue(sMenuItemList[3 * j + 1], j);
sMenuItemHref.SetValue(sMenuItemList[3 * j + 2], j);
}// End - for - j
string sSelectText = "";
for (int j = 0; j < iMenuItemCount; j++)
{
mi = new Coolite.Ext.Web.MenuItem();
mi.Text = sMenuItemNme.GetValue(j).ToString();
mi.Href = sMenuItemHref.GetValue(j).ToString();
//mi.HrefTarget = "_blank";
mi.Icon = Icon.BellSilver;
sSelectText = mpl.Title + "," + mi.Text;
mi.Listeners.Click.Handler = "asscesslog('" + i.ToString() + "','" + j.ToString() + "','0','" + sSelectText + "', '')";
mpl.Menu.Items.Add(mi);
}// End - for - j
Accordion1.Items.Add(mpl);
#endregion --"no SubMenu"
}
else
{//have SubMenu
#region "have SubMenu"
string strSubMenu = "";
int iSubMenuCount = 0;
strSubMenu = GetSubMenuData(i.ToString());
string[] sSubMenuList = strSubMenu.Split(',');
if (strSubMenu == "") break;
iSubMenuCount = sSubMenuList.Length / 2;
string[] sSubMenuNme = new string[iSubMenuCount];
string[] sSubMenuIndex = new string[iSubMenuCount];
pl2 = new Coolite.Ext.Web.Panel();
pl2.Title = sMenuNme.GetValue(i).ToString();
pl2.Collapsible = true;
pl2.AutoHeight = true;
pl2.Collapsed = true; // [Collapse]Panel
Accordion2 = new Coolite.Ext.Web.Accordion();
for (int j = 0; j < iSubMenuCount; j++)
{
sSubMenuNme.SetValue(sSubMenuList[2 * j], j);
sSubMenuIndex.SetValue(sSubMenuList[2 * j + 1], j);
string strMenuItem = "";
int iMenuItemCount = 0;
strMenuItem = GetMenuItem(i.ToString(), j.ToString());
string[] sMenuItemList = strMenuItem.Split(',');
if (strMenuItem == "") break;
iMenuItemCount = sMenuItemList.Length / 3;
string[] sMenuItemNme = new string[iMenuItemCount];
string[] sMenuItemIndex = new string[iMenuItemCount];
string[] sMenuItemHref = new string[iMenuItemCount];
mpl = new Coolite.Ext.Web.MenuPanel();
mpl.Title = sSubMenuNme.GetValue(j).ToString();
mpl.Collapsible = true;
mpl.AutoHeight = true;
mpl.Collapsed = true; // [Collapse]MenuPanel
for (int k = 0; k < iMenuItemCount; k++)
{
sMenuItemNme.SetValue(sMenuItemList[3 * k], k);
sMenuItemIndex.SetValue(sMenuItemList[3 * k + 1], k);
sMenuItemHref.SetValue(sMenuItemList[3 * k + 2], k);
}// End - for - k
string sSelectText = "";
for (int k = 0; k < iMenuItemCount; k++)
{
mi = new Coolite.Ext.Web.MenuItem();
mi.Text = sMenuItemNme.GetValue(k).ToString();
mi.Href = sMenuItemHref.GetValue(k).ToString();
//mi.HrefTarget = "_blank";
mi.Icon = Icon.BellSilver;
sSelectText = pl2.Title + "," + mpl.Title + "," + mi.Text;
mi.Listeners.Click.Handler = "asscesslog('" + i.ToString() + "','" + j.ToString() + "','" + k.ToString() + "','" + sSelectText + "', 'SubMenu')";
mpl.Menu.Items.Add(mi);
}// End - for - k
Accordion2.Items.Add(mpl);
}// End - for - j
pl2.Items.Add(Accordion2);
Accordion1.Items.Add(pl2);
#endregion --"have SubMenu"
}// if (!IsSubMenu(sMenuIndex[i]))
}// End - for - i
pnlTreePanel.Items.Add(Accordion1);
#endregion --[Dynamic Generate Menu]
#region [State Display]
// #######################################################################
// ######## Direct use index number to set open and selected Item ########
// #######################################################################
string[] stateList = null;
if (HttpContext.Current.Session["SelectNode"] != null)
if (HttpContext.Current.Session["SelectNode"].ToString() != "")
stateList = HttpContext.Current.Session["SelectNode"].ToString().Split(',');
if (stateList == null) return;
int num1 = -1, num2 = -1, num3 = -1;
string plTitle = "", mplTitle = "", itemText = "", menutype = "";
if (stateList.Length > 1)
{
num1 = Convert.ToInt32(stateList[0]);
num2 = Convert.ToInt32(stateList[1]);
num3 = Convert.ToInt32(stateList[2]);
plTitle = stateList[3];
mplTitle = stateList[4];
itemText = stateList[5];
menutype = stateList[6];
}
if (menutype != "SubMenu")
{
#region "no SubMenu"
mpl = new Coolite.Ext.Web.MenuPanel();
mpl = (Coolite.Ext.Web.MenuPanel)Accordion1.Items[num1];
mpl.Collapsed = false;
mpl.SelectedIndex = num2;
#endregion --"no SubMenu"
}
else
{
#region "have SubMenu"
Coolite.Ext.Web.Panel pl = new Coolite.Ext.Web.Panel();
pl = (Coolite.Ext.Web.Panel)Accordion1.Items[num1];
pl.Collapsed = false;
mpl = new Coolite.Ext.Web.MenuPanel();
mpl = (Coolite.Ext.Web.MenuPanel)((Coolite.Ext.Web.Panel)Accordion1.Items[num1]).Items[num2];
mpl.Collapsed = false;
mpl.SelectedIndex = num3;
#endregion --"have SubMenu"
}
#endregion --[State Display]
}
protected void DisplaySelectStatus()
{
}
#region DB_Access
[AjaxMethod]
public string SaveLog(int num1, int num2, int num3, string SelectText, string menutype)
{
string result = "";
string plTitle = "", mplTitle = "", itemText = "";
string [] sSelectText = null;
if (SelectText.Trim() != "")
sSelectText = SelectText.Trim().Split(',');
if (sSelectText.Length > 2)
{
plTitle = sSelectText[0];
mplTitle = sSelectText[1];
itemText = sSelectText[2];
}
else
{
mplTitle = sSelectText[0];
itemText = sSelectText[1];
}
result = num1.ToString() + "," + num2.ToString() + "," + num3.ToString() + "," + plTitle + "," + mplTitle + "," + itemText + "," + menutype;
HttpContext.Current.Session["SelectNode"] = result;
return result;
}
#endregion --DB_Access
}
}
like below page , have 6~8 page:MenuInMasterPage01.aspx:
<%@ Page Language="C#" MasterPageFile="Master2.master" AutoEventWireup="false" CodeFile="MenuInMasterPage01.aspx.cs" Inherits="MenuInMasterPage01" %>
<%@ Register TagPrefix = "ext" Namespace = "Coolite.Ext.Web" Assembly = "Coolite.Ext.Web" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Label runat = server ID = Label1 Text = "Page01" />
</asp:Content>