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>はセッション内に保存し、追加/削除するときにリストに戻すことができます。

ただし、指摘しておきますが、あなたがやろうとしているように見えることを行うには、おそらくはるかに優れた方法があります。セッションはアプリ全体のページ間で実行されます。これは、よりローカライズされたデータ永続性の問題のようです。つまり、データベースを使用して一時状態を追跡するか、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 に答える