C# 如何将菜单项(文本)保存到动态会话状态
好的,下面是从数据库表动态填充菜单项的代码。 现在我要做的是将数据库中的“PageHeader”保存到会话状态中,这样我就可以使用这些会话值来检查用户对不同内容页面页面加载的授权。 现在,由于每个用户都有不同数量的授权页面,因此会话的数量将因用户而异。这些会话的值将与内容页的页面加载上的页面标题变量匹配C# 如何将菜单项(文本)保存到动态会话状态,c#,asp.net,sql-server,session,menubar,C#,Asp.net,Sql Server,Session,Menubar,好的,下面是从数据库表动态填充菜单项的代码。 现在我要做的是将数据库中的“PageHeader”保存到会话状态中,这样我就可以使用这些会话值来检查用户对不同内容页面页面加载的授权。 现在,由于每个用户都有不同数量的授权页面,因此会话的数量将因用户而异。这些会话的值将与内容页的页面加载上的页面标题变量匹配 有人能帮我怎么做吗 另外,我想改变菜单栏的样式,否则 默认和非常简单 上述代码中使用的业务逻辑层方法为: public DataTable master_Menu_Bar(EntityLay
上述代码中使用的业务逻辑层方法为:
public DataTable master_Menu_Bar(EntityLayer.Entity en)
{
return dll.ReturnSingleTable("Select PageHeader,PageUrl from authorized_view where Emp_Mobile="+ en.cal_EmpMobile);
}
您可以创建字符串的
列表
,然后将菜单项放入其中
,然后将该字符串列表放入会话中
以后仅从会话中检索
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;}
}
我们是如何做到这一点的
列表菜单列表=新列表()
DataTable dt=newdatatable();
dt=bll.主菜单栏(en);
DataRow[]drow=dt.Select();
foreach(数据行dr-in-drow)
{
MenuHelper helperItem=新建MenuHelper();
helperItem.PageId=dr[“PageId”].ToString();
helperItem.PageHeader=dr[“PageHeader”].ToString();
helperItem.PageUrl=dr[“PageUrl”].ToString();
//是否可以在此处添加菜单
MenuBar.Items.Add(新的MenuItem(dr[“PageHeader”].ToString(),dr[“PageId”].ToString(),“”,dr[“PageUrl”].ToString());
//将项目添加到列表中
menulist.Add(helperItem);
}
//将列表添加到会话或视图状态
会话[“MenuItems”]=菜单列表;
//检索列表时,请执行以下操作
列表菜单列表=(列表)会话[“菜单项”];
这是我做这件事的简单代码
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()));
}
private void GetMenu()
{
//从业务逻辑层获取数据
DataTable dt1=新DataTable();
dt1=bll.主菜单栏(en);
//会话,使母版页不会与每个PostBack上的数据库交互
会话[“数据表”]=dt1;
DataTable dt=新的DataTable();
dt=(数据表)会话[“数据表”];
//menuitems页面id的会话,将在每个页面的页面加载时检查授权。
int i=0;
而(i
您能否解释如何将PageHeader作为文本页面ID作为值和pageurl作为导航URL添加到该列表中?以及如何从列表中创建菜单……我的意思是,您只能将一个列值添加到该列表中的数据集中?之后如何将其转换为菜单?
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"];
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()));
}