如何将菜单项(文本)保存到动态会话状态

时间:2014-03-05 11:44:38

标签: c# asp.net sql-server session menubar

好的,下面是从数据库表中动态填充菜单项的代码。 现在我想要做的是将“PageHeader”从数据库保存到会话状态,以便我可以使用这些会话值来检查用户在页面上的授权 - 加载不同的内容页面。 现在既然每个用户都有不同的号码。授权页面,所以没有。会话因用户而异。这些会话的值将与内容页面的页面加载上的 PageHeader 变量匹配。

  1. 有人可以帮我解决这个问题。
  2. 我也想改变菜单栏的样式 默认非常简单。

  3. private void GetMenu()
    {
        DataTable dt = new DataTable();
        dt = bll.master_Menu_Bar(en);
        DataRow[] drow = dt.Select();
        foreach (DataRow dr in drow)
        {
            MenuBar.Items.Add(new MenuItem(dr["PageHeader"].ToString(), dr["PageId"].ToString(), "", dr["PageUrl"].ToString()));
        }
    

    上面代码中使用的业务逻辑层方法是:

    public DataTable master_Menu_Bar(EntityLayer.Entity en)
        {
            return dll.ReturnSingleTable("Select PageHeader,PageUrl from authorized_view where Emp_Mobile="+ en.cal_EmpMobile);
        }
    

2 个答案:

答案 0 :(得分:1)

您可以制作list of stringput your menu items in there,然后将该字符串列表放入会话

稍后只从会话中检索。

foreach (DataRow dr in drow)
    {
      //add items to list here
    }
 //make menu from that list
 //put that in session or view state

更新

如何使其存储页面ID,页面URL和页面标题

首先我们声明一个类

 public Class MenuHelper
{
   public String PageId {get; set;}
   public String PageHeader {get; set;}
   public String PageUrl {get; set;}
}

我们如何做到这一点

列出menulist = new List();

DataTable dt = new DataTable();
dt = bll.master_Menu_Bar(en);
DataRow[] drow = dt.Select();
foreach (DataRow dr in drow)
{
    MenuHelper helperItem = new MenuHelper();
    helperItem.PageId = dr["PageId"].ToString();
    helperItem.PageHeader = dr["PageHeader"].ToString();
    helperItem.PageUrl = dr["PageUrl"].ToString();
    //can add menu here or not
    MenuBar.Items.Add(new MenuItem(dr["PageHeader"].ToString(), dr["PageId"].ToString(), "", dr["PageUrl"].ToString()));
    //Add items to list
    menulist.Add(helperItem);
}

//Add list to session or view state
Session["MenuItems"] = menulist;

//When retrieving list do like this

List<MenuHelper> menulist = (List<MenuHelper>)Session["MenuItems"];

答案 1 :(得分:0)

这是我做的事情的简单代码..

 private void GetMenu()
{
//fetches data from business logic layer
    DataTable dt1 = new DataTable();
    dt1 = bll.Master_Menu_Bar(en);
//session so that the masterpage doesnt interact with database on everypostback
    Session["dataTable"] = dt1;
    DataTable dt=new DataTable();
    dt=(DataTable)Session["dataTable"];
//session for page id's of the menuitems which will be checked for authorization at page loads of every page.
    int i = 0;
    while (i < dt.Rows.Count)
    {
        int[] PageId = new int[dt.Rows.Count];
        PageId[i] = Convert.ToInt32(dt.Rows[i][2]);
        Session["PageId" + i] = PageId[i];
        i++;

    }
//A session to keep count of the no. of menu items , this session is also used at page loads of pages as condition of if statement
    Session["count"] = dt.Rows.Count;
    DataRow[] drow = dt.Select();
    foreach (DataRow dr in drow)
    {
        MenuBar.Items.Add(new MenuItem(dr["PageHeader"].ToString(), dr["PageId"].ToString(), "", dr["PageUrl"].ToString()));
    }