2013-02-22 4 views
0

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

У меня есть пользовательский элемент управления с текстовым удавом и выпадающим списком и несколькими пользовательскими валидаторами. Пользовательский элемент управления динамически добавляется через код.

Я использую follwoing код для загрузки DropDownList внутри самого блока управления пользователя

protected void Page_Load(object sender, EventArgs e) 
    {    
     ddl_RRC.DataSource = dicRC_Desc; 
     ddl_RRC.DataTextField = "value"; 
     ddl_RRC.DataValueField = "key"; 
     ddl_RRC.DataBind(); 

     txtRC.Text = Request.Form[txtRC.UniqueID]; //To retain the value of text box   
    } 

Я добавляю пользовательского элемента управления динамически на Page_Init

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (GetPostBackControl(this) == "btnNewRow") 
     { 
      custControlCountID++; 
     } 
     for (int i = 0; i < custControlCountID; i++) 
     { 
      RejRow customControl = (RejRow)LoadControl("~/RejRow.ascx"); 
      customControl.ID = "rejRow" + i; 
      divHolder.Controls.Add(customControl); 
     } 
    } 

ViewState включено как для текстового поля и падения вниз. Как я использую тот же ID при добавлении элементов управления в Page_Init, почему элементы управления не получают значения из viewstate?

+0

Где объявлена ​​переменная 'custControlCountID', сохраняет ли она значение в' ViewState'? –

+0

'custControlCountID' является частной статической переменной класса' _Default' – nishantv

+0

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

ответ

0

Я думаю, что единственная проблема в том, что у вас есть привязка DropDownList к каждой обратной передаче от Page_Load. Просто проверьте IsPostback -свойства, например .:

protected void Page_Load(object sender, EventArgs e) 
{  
    if(!IsPostBack) 
    {  
     ddl_RRC.DataSource = dicRC_Desc; 
     ddl_RRC.DataTextField = "value"; 
     ddl_RRC.DataValueField = "key"; 
     ddl_RRC.DataBind(); 
    } 

    txtRC.Text = Request.Form[txtRC.UniqueID]; //To retain the value of text box   
} 

Однако, я не знаю, почему вы должны установить TextBox.Text свойства из полой формы, так как он должен хранить это Text также в ViewState.

+0

Спасибо за ответ. Вы правы в отношении полей формы для viewstate. Я добавил его раньше, потому что, по моему мнению, viewstae был установлен в false для моего пользовательского контроля. И теперь его не нужно. Однако для раскрывающегося списка, когда я использую if (! Postback), при нажатии кнопки для добавления новой строки выбор сохраняется для предыдущего элемента управления, но новые элементы управления даже не получают значения. Вы видите, что его нужно заполнять при загрузке страницы, и с помощью кнопки он всегда выполняет обратную передачу, поэтому этот код запускается только для первого элемента управления, когда полная форма загружается в первый раз. – nishantv

+0

@nishantv: вы должны обрабатывать 'btnNewRow-click' для создания нового элемента управления вместо использования 'Page_Init'. Я думаю, вы неправильно поняли, как вам (ре) создавать динамические элементы управления. Создайте их в случае, вызвавшем его, но ** заново создайте ** их в 'Page_Init' (или' Page_Load' последний). Вы должны привязать его, когда сначала создадите его. –

+0

Даже если я отделяю код от Page_Init для создания элемента управления, проблема сохраняется. Проблема заключается в загрузке выпадающего списка в Page_Load пользовательского элемента управления. Поскольку событие нажатия кнопки задействовано, всегда есть обратная передача. Если я загружу ddl с 'if (! Postback)' элементы управления не загружаются вообще. Если я не использую 'if (! Postback)' ddl перезагружается и выбор теряется. – nishantv

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

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