【问题标题】:Putting List into Session将列表放入会话
【发布时间】:2013-09-26 17:49:56
【问题描述】:

我的项目中有这个模块,其中有 2 个网格视图。一个用于主菜单模块,另一个用于它的子菜单。我创建了一个列表,以便当我的主菜单模块上的一行被选中并且它具有相应的子菜单时,它将显示在 SubMenu Gridview 上。

我的问题是如何将此列表放入会话中,以便当我导航到另一个页面然后返回此页面时,SubMenu Gridview 仍然存在。

这是我的列表代码。

protected void cbxSelect_CheckedChanged(object sender, EventArgs e)
        {

    SubMenuGrid.DataSource = null;
    SubMenuGrid.DataBind();

    Business.SubMenuModules sub = new Business.SubMenuModules();

    List<oSubList> oList = new List<oSubList>();

    int counter = 0;

    foreach (GridViewRow nRow in gvModuleList.Rows)
    {
        Int32 intModID = Convert.ToInt32(nRow.Cells[0].Text);
        CheckBox chkBx = (CheckBox)nRow.FindControl("cbxSelect");

        if (chkBx.Checked == true)
        {
            counter = counter + 1;

            var oModList = sub.GetAllMenuPerModuleID(intModID);

            if (oModList.Count > 0)
            {

                foreach (var rec in oModList)
                {
                    oSubList olist = new oSubList
                    {
                        ID = rec.ID,
                        ModuleID = rec.ModuleID,
                        Submenu = rec.Submenu,
                        Description = rec.Description
                    };
                    oList.Add(olist);    
                }

                SubMenuGrid.DataSource = oList;
                SubMenuGrid.DataBind();
            }
        }

【问题讨论】:

  • 为什么要在 Session 中使用它?您不想将更改保存在某处吗?
  • 他使用状态管理bcoz,即使页面过期后也可以保留值..
  • 我还不想将它保存在我的数据库中,我只想暂时存储它,以便在提交前返回该页面时,我可以看到我的子菜单 gridview..

标签: c# asp.net list session gridview


【解决方案1】:

只需将列表传递给 session["list"]。
在页面加载时检查用户的条件并将会话值分配给菜单..

protected void cbxSelect_CheckedChanged(object sender, EventArgs e)
        {

        SubMenuGrid.DataSource = null;
        SubMenuGrid.DataBind();

        Business.SubMenuModules sub = new Business.SubMenuModules();

        List<oSubList> oList = new List<oSubList>();

        int counter = 0;

        foreach (GridViewRow nRow in gvModuleList.Rows)
        {
            Int32 intModID = Convert.ToInt32(nRow.Cells[0].Text);
            CheckBox chkBx = (CheckBox)nRow.FindControl("cbxSelect");

            if (chkBx.Checked == true)
            {
                counter = counter + 1;

                var oModList = sub.GetAllMenuPerModuleID(intModID);

                if (oModList.Count > 0)
                {

                    foreach (var rec in oModList)
                    {
                        oSubList olist = new oSubList
                        {
                            ID = rec.ID,
                            ModuleID = rec.ModuleID,
                            Submenu = rec.Submenu,
                            Description = rec.Description
                        };
                        oList.Add(olist);    
                    }

                    Session["list"]=oList;

                    SubMenuGrid.DataSource = oList;
                    SubMenuGrid.DataBind();
                }
            }

【讨论】:

  • 嗨,如果我在页面加载受保护的 void btnNext_Click(object sender, ImageClickEventArgs e) { oList = Session["list"] Response.Redirect("~/Forms/ RegReason.aspx"); }
  • 是的,它会,但你必须通过检查当前登录的用户或其他东西来恢复视图..检查后只需将会话值传递给网格..
  • 您好,感谢您的快速回复!如果我在页面加载时传递它会是这样吗? oList = Session["list"] 索引应该是什么??
  • 如何将值传递给网格?像 oList = Session["list"] 吗?
  • 不,你只是给 response.redirect("~/Forms/RegReason.aspx");从其他页面..然后在重新加载页面时,给出以下代码..SubMenuGrid.DataSource = session["list"]; SubMenuGrid.DataBind();
【解决方案2】:

只需将您的列表分配给会话并在子菜单页面上调用它。

在主菜单页面上

Session["list"]=oList;

在子菜单页面上

List<oSubList> subList = (List<oSubList>) Session["list"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2021-07-02
    • 2011-08-15
    • 2012-01-05
    • 2015-07-09
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多