1

複数のアイテムを1つのセッション変数に格納しています。これは4つの異なる単語です。

1つのセッションでこれらの4つの異なる単語を取得し、それらを別々の変数に格納して使用できるようにする必要がありますが、これは可能ですか?もしそうなら、どのように?

_applicationは、テキストボックスからの一連のテキストからのテキストを保持するだけです。

これが私のセッションクラスです。

 public class JobApplicantSession
{

    public JobApplication ApplicationSession
    {

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

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

求人応募:求人応募は、テキストボックスのリストからの情報を保持します。

JobApplication _application;
_application = new JobApplication(jobID);
if (i < _applicant.Fields.Count)
                _applicant.AddAnswer((_controlsList[i] as TextBox).Text);
            else
                _application.AddAnswer((_controlsList[i] as TextBox).Text);

セッションに追加します。

_sessions.ApplicationSession = _application;

私はセッションを得ることができます:

JobApplication application;
var jas = new JobApplicantSession();
application = jas.ApplicationSession;

求人応募:

public class JobApplication
{
    private int _jobID = -1;
    public JobApplication(int jobID)
    {
        _jobID = jobID;
    }
    List<String> _answers = new List<String>();
    List<JobApplicationField> _fields = new List<JobApplicationField>();
    public List<JobApplicationField> Fields
    {
        get { return _fields; }
    }
    public int JobID()
    {
        return _jobID;
    }
    public List<String> Answers
    {
        get { return _answers; }
        set { _answers = value; }
    }
    public void AddAnswer(String answer)
    {
        _answers.Add(answer);
    }
    public void AddField(JobApplicationField field)
    {
        if (field.HasFieldID)
        {
            for (int i = 0; i < _fields.Count(); i++)
            {
                if (_fields[i].FieldID == field.FieldID)
                {
                    _fields[i] = field;
                    return;
                }
            }

        }

        _fields.Add(field);
    }
    public void PopulateFromDatabase()
    {
        JobPositionSystemDAL dal = new JobPositionSystemDAL();
        DataSet data = dal.OpenJobOpeningByID(_jobID);
        foreach (DataRow row in data.Tables[0].Rows)
        {
            JobApplicationField field = new JobApplicationField(Convert.ToInt32(row["QUESTIONID"]), row["QUESTIONTEXT"].ToString(), Convert.ToBoolean(row["HASCORRECTANSWER"]), row["CORRECTANSWER"].ToString(), Convert.ToBoolean(row["ISREQUIRED"]));
            AddField(field);
        }
    }
    public bool Verify()
    {
        if (_fields.Count != Answers.Count)
            throw new Exception("Number of answers != number of fields");
        for (int i = 0; i < _fields.Count; i++)
        {
            if (_fields[i].HasCorrectAnswer == true && _fields[i].CorrectAnswer != _answers[i])
                return false;
        }
        return true;
    }

    public void Save()
    {
        JobPositionSystemDAL database = new JobPositionSystemDAL();

        foreach(JobApplicationField field in _fields)
        {
            field.Save(_jobID, ref database);
        }

        //reload to get the Field/question ID for any new fields
        Reload();
    }

    public void Reload()
    {
        _fields = new List<JobApplicationField>();
        Load(_jobID);
    }

    public void Load(int jobID)
    {
        _jobID = jobID;
        DataSet ds = DB.OpenJobOpeningByID(jobID);
        DataTable table = ds.Tables[0];

        foreach (DataRow row in table.Rows)
        {
            int questionID = 0;
            object obj = row["QUESTIONID"];
            Int32.TryParse(obj.ToString(), out questionID);
            //int jobApplicationID = Int32.Parse(row["JOBAPPLICATIONID"] as String);
            string questionText = row["QUESTIONTEXT"] as String;
            int type = Int32.Parse(row["TYPEID"].ToString());
            bool hasCorrectAnswer = (row["HASCORRECTANSWER"] as String == "0") ? false : true;
            string correctAnswer = row["CORRECTANSWER"] as String;
            bool required = ((row["ISREQUIRED"] as String) == "0") ? false : true;

            JobApplicationField field = new JobApplicationField(questionID, questionText, hasCorrectAnswer, correctAnswer, required);
            AddField(field);
        }
    }
    private JobPositionSystemDAL _db;
    private JobPositionSystemDAL DB 
    {
        get
        {
            if (null == _db)
                _db = new JobPositionSystemDAL();
            return _db;
        }
    }
}
}

各アイテムをループして独自の変数に格納するにはどうすればよいですか?4つの変数が必要になります。

4

1 に答える 1

0

それがあなたが求めているものであることを願っています。オブジェクトの配列をセッション状態に保存する場合は、配列を直接保存できます。

 HttpContext.Current.Session["data"] = new int[32]; 

または、要素のインデックスに基づいて名前を動的に作成します (奇妙ですが、可能です):

 var data = new int[3];
 HttpContext.Current.Session["data" + 0.ToString()] = data[0]; 
 HttpContext.Current.Session["data"  + 1.ToString()] = data[1]; 
 HttpContext.Current.Session["data"  + 2.ToString()] = data[2]; 

逆の順序で読む:

var dataArray = (int[])(HttpContext.Current.Session["data"]);

また

 var data = new int[3];
 data[0] = (int)HttpContext.Current.Session["data" + + 0.ToString()]; 
于 2012-04-27T23:09:06.893 に答える