【问题标题】:How to create session variables without knowing how many to create?如何在不知道要创建多少的情况下创建会话变量?
【发布时间】:2012-06-25 05:02:12
【问题描述】:

首先,我使用的是 Visual Studio 2010 (Visual C#) 和 ASP.NET。

我正在使用 GridView 来显示我公司当前的空缺职位。我有一列复选框,申请人可以在其中检查他们想要申请的职位。为了消除重复数据,我在三个主表(POSITION、APPLICANT 和 APPLICATION)之间创建了一个链接表。它仅由每个表中的主键组成,因此如果一个人申请 3 个职位,我们将不会筛选 3 个完整的申请。

我需要选择他们选择的位置的 PositionID,并将它们存储在会话变量中以供以后使用。

我的问题是,我如何在不知道他们检查了多少的情况下做到这一点?我不想只创建一堆不会使用的不必要的变量。我想我必须使用 foreach 循环,但在循环中,我不知道如何告诉它创建一个新的会话变量并将 ID 存储在其中。

我当然希望这个问题有意义。如果您需要澄清,请告诉我。

【问题讨论】:

  • 如果用户选中该框,您不能遍历网格的 ViewState 数据,然后在链接表中创建新记录吗?
  • 我不能说我知道 ViewState 是什么。 (编程新手。)
  • 在页面回发中,您只需遍历 gridview 中的项目,如果用户选中该位置的框,您将在链接表中创建一行。 ViewState 是回发期间存储数据的位置。
  • 啊。我看到了我们的困惑。是的,理想情况下这是我想做的,但我需要保留这些 PositionID,直到我/可以/将记录写入链接表中,直到他们完成另外两个步骤(APPLICATION 和 APPLICANT 信息)。从那里,我得到了这些表中记录的 ID。

标签: c# sql-server visual-studio-2010 gridview checkbox


【解决方案1】:

您可以只创建一个List<int> 或任何数据类型 PositionID 并将其存储在会话变量中。

其实我会在控件或页面中创建一个属性为

public List<int> SelectedPositionIDList
{
   get
   {
        if(Session["SelectedPositions"] != null)
          return Session["SelectedPositions"] as List<int>;
        return new List<int>();
   }
   set
   {
      Session["SelectedPositions"] = value;
   }
}

你可以遍历位置ID列表,

foreach(int positionId in SelectedPositionIdList)
{
   //Do something.
}

当然,当他们想要保存或执行某些操作时,您需要从 gridview 中获取 id。您可以通过根据您的实现循环遍历 gridview 行来做到这一点。如下所示。

List<int> positions = new List<int>();

foreach(GridviewRow row in gdPositions)
{
    CheckBox cb = row.FindControl("checkbox") as CheckBox;
    if(cb != null && cb.Checked)
      positions.Add(/*find position id from row here*/);
}

if(positions.Count > 0)
    Session["SelectedPositionIdList"] = positions;

【讨论】:

  • 那么在那个列表中我可以存储多个值吗? [是的,它是一个 int。]
  • 是的。您可以将项目添加到列表中
  • 是的,该列表包含一个数据类型的值的集合。您可以只使用一个会话变量来保存这些职位 ID 的列表。
猜你喜欢
  • 2019-08-08
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多