将文本框值添加到会话中

时间:2012-04-20 16:58:09

标签: c# asp.net session

我正在动态创建文本框。我想获取这些文本框值并将它们存储在会话中,以便我可以将它们存储在数据库中。我怎么能这样做?

因此,我存储DYNAMICALLY创建的文本框值的方式是这样的。

List<Control> _controlsList;
controlsList = new List<Control>();     // object holds the controls

现在,在我的功能中,我会以这种方式添加它们。请记住,我有3个以上的文本框

if (i < _applicant.Fields.Count)
                _applicant.AddAnswer((_controlsList[i] as TextBox).Text);
            else
                _application.AddAnswer((_controlsList[i] as TextBox).Text);
            _sessions.ApplicationSession = ((_controlsList[i] as TextBox).Text);
           // Session["TextboxValue"] = ((_controlsList[i] as TextBox).Text);

我有一个会话类

 public class JobApplicantSession
 {

   // public JobApplication ApplicationSession
    public string ApplicationSession
    {

      get {if (HttpContext.Current.Session["Application"] != null)
              // return (JobApplication)HttpContext.Current.Session["Application"];
                 return (string)HttpContext.Current.Session["Application"];
           return null; }

      set{ HttpContext.Current.Session["Application"] = value; }
    }


}

我可以添加然后当我从另一个类中检索它们时,我只获得最后添加的文本框。我需要能够循环,所以我可以将这些文本框值添加到数据库但我无法循环通过对象

var value = HttpContext.Current.Session["Application"]; //will get last textbox value

3 个答案:

答案 0 :(得分:0)

您需要在Session存储桶中存储可以添加和删除的复杂对象。在您的情况下,理论上您可以将List<Control>存储在会话中,然后在要添加/删除时将其转换回List。

但是,我会指出,做一些你似乎想做的事情可能有更好的方法。会话跨整个应用程序的页面进行;这似乎是一个更加本地化的数据持久性问题,这意味着您应该使用数据库来跟踪临时状态,或者您应该使用ViewState。

答案 1 :(得分:0)

您需要以某种列表结构将它们存储在会话中。

var values = new List<string>();
// add each text box value to the list.

HttpContext.Current.Session["Application"] = values;

//To get them back
var retrieved = HttpContext.Current.Session["Application"] as List<string>;

您可能必须使用稍微使用的数据类型,有些不能很好地序列化。

答案 2 :(得分:0)

更改您的会话类,如

public class JobApplicantSession
 {

   // public JobApplication ApplicationSession
    public string ApplicationSession
    {

      get {   if (HttpContext.Current.Session["Application"] == null)
              HttpContext.Current.Session["Application"] = new List<string>();
           return (List<string>)HttpContext.Current.Session["Application"];
      }

    }


}

并将答案添加到列表

 _sessions.ApplicationSession.Add((_controlsList[i] as TextBox).Text);

你现在可以循环..

foreach(string answer in _sessions.ApplicationSession )
{
...
}