【问题标题】:Add textbox values to a session将文本框值添加到会话
【发布时间】:2012-04-20 16:58:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net session


    【解决方案1】:

    像改变你的会话类

    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 )
    {
    ...
    }
    

    【讨论】:

    • 我如何在另一个类中检索它们?循环遍历它们,以便我可以将它们添加到数据库中?
    • 我能够做到这一点: List result = (List)HttpContext.Current.Session["Application"];
    • 这也是正确的,但是使用像 JobApplicantSession 这样的包装类是更优雅的方式。
    • 我是否应该使用字符串生成器进行字符串查询,以便将它们添加到数据库中?
    【解决方案2】:

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

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

    【讨论】:

    • 如何使用视图状态?难道我不喜欢我做一个会话然后我有同样的问题吗?
    • 正确,ViewState 的功能与Session 类似,不同之处在于存储仅本地化到此页面,这样更好。您仍然需要修改您的代码,而不是简单地覆盖最后写入的值,例如,将对象存储为 List&lt;&gt;,然后添加到该对象。
    【解决方案3】:

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

    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-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多