1

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

所以,我存储动态创建的文本框值的方式就是这种方式。

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
4

3 回答 3

0

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

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

于 2012-04-20T17:04:45.650 回答
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>;

您可能需要稍微使用一下您使用的数据类型,有些不能很好地序列化。

于 2012-04-20T17:06:18.280 回答
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 )
{
...
}
于 2012-04-20T17:07:54.913 回答