2014-12-03 2 views
0

Сценарий: Я добавил динамическое управление текстовым полем asp на мою страницу с помощью кода C#. У меня есть кнопка, которая удаляет это текстовое поле, заменяет его текстовым текстом в текстовом поле.как сохранить свойства динамического управления

Проблема: Когда я нажимаю кнопку, последовательность page_init-> page_load-> page_prerender запускается, стирая мой элемент управления текстовым полем.

Я запускаю текстовое поле с помощью метода в page_prerender.

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

код у меня есть на сегодняшний день

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 

    } 
    else 
    { 
     add_tb(); 
    } 
} 

private void add_tb() 
{ 
    Textbox tb = new Textbox(); 
    pnlButtons.add(tb); //this is a panel init'd at design time which also includes a button 
} 
protected void imgBtn_Click_home(object sender, ImageClickEventArgs e) 
{ 
    lblTest.Text=tb.Text; // where do i declare the tb to access it from here and to persist it? 
} 

Кроме того, где я могу объявить Т.Б., чтобы получить доступ к его здесь и упорствовать его?

ответ

1

Вы не показываете код. Я отвечу вам словами.

Вы всегда должны добавить элементы управления, это происходит на CreateChildControl Method

TextBox txt; 

    protected override void CreateChildControls() 
    { 
     base.CreateChildControls(); 

     txt = new TextBox(); 
     txt.ID = "textBoxTest"; 
     txt.Visible = false; 

     pnlButtons.add(txt); // till now pnlButtons should be created because you call first for base.CreateChildControls 
    } 

Если вы хотите, чтобы сделать управление не «добавлен» в каком-то случае, если вы просто сделать его видимым ложь по умолчанию.

После этого, когда вы собираетесь OnPreRender

protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     if(condition)//condition is when you show your checkbox 
     { 
      txt.Visible = true; 
      lblTest.Visible = false; 
     } 
     else 
     { 
      lblTest.Visible = true; 
      txt.Visible = false; 
     } 
    } 

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

+0

THX человек, не можете ли вы уточнить данный код, который я разместил в вопросе? – Fearghal

+0

@ Fearghal вам нужно что-то подобное. – mybirthname

+0

Hmm il проверить это - в идеале я хочу, чтобы страница возвращалась с текстовым полем, но могут быть другие осложнения, которые я не включил в вопрос для ясности. У меня есть настраиваемый элемент управления, частью которого является текстовое поле. текстовое поле имеет текст, введенный пользователем, и нажимается кнопка - мне нужен этот текст, но мы теряем контроль над клиентом (и текстовое поле, содержащееся в нем) на клике из-за обновления. Il проверить выше, чтобы узнать, если это поможет. вернемся завтра с ответом. – Fearghal