2012-04-20 2 views
1

Я создаю текстовые поля динамически. Я хочу взять эти значения текстового поля и сохранить их в сеансе, чтобы затем хранить их в базе данных. Как я могу это сделать?Добавить значения текстового поля в сеанс

Таким образом, способ хранения DYNAMICALLY созданных текстовых полей является таким образом.

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

Теперь, в моей функции я добавляю их таким образом. Имейте в виду, у меня есть 3 + Textboxes

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; } 
    } 


} 

я могу добавить то, но когда я получить их из другого класса я только получить последний добавленный текстовое поле. Мне нужно, чтобы иметь возможность перебрать, так что я могу добавить эти значения TextBox в базу данных, но я не могу петлю через объект

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

ответ

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

Как получить их в другом классе? петля через них, поэтому я могу добавить их в базу данных? –

+0

создать экземпляр JobApplicantSession и использовать его в другом классе .. – hkutluay

+0

Мне удалось это сделать: Список result = (Список ) HttpContext.Current.Session ["Application"]; –

0

Вы должны хранить сложный объект в Session ведра, что вы можете добавлять и удалять из , В вашем случае вы можете теоретически просто сохранить List<Control> в сеансе, а затем преобразовать его обратно в список, если вы хотите добавить/удалить его.

Однако, я укажу, что, вероятно, гораздо лучший способ сделать то, что вы пытаетесь сделать. Сессия переносится через страницы в приложении; это, как представляется, более локализованная проблема сохранения данных, а это означает, что вы должны либо использовать базу данных для отслеживания состояния temp, либо использовать ViewState.

+0

, как я могу использовать ViewState? Dont я dd он как я делаю сессию s тогда я имею такую ​​же проблему? –

+0

Правильно, 'ViewState' будет работать аналогично' Session', за исключением того, что хранилище локализовано только на этой странице, что лучше. Вам все равно нужно будет изменить свой код, чтобы не просто перезаписать последнее значение, например, сделав объект сохраненным «List <>», а затем добавив к этому объекту. – Tejs

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>; 

Возможно, вам придется играть с типом данных, который вы используете немного, некоторые из них не сериализуются хорошо.

Смежные вопросы