2016-02-02 4 views
0

У меня есть следующая проблема: Я динамически создаю TextBox на своей веб-странице, его значение начинается с «initialVal» в начале. Теперь мне нужно сделать обратную передачу (не обратный вызов) на сервер, и во время этой операции мне нужно вычислить/изменить значение моего текстового поля на другое значение.Динамически созданное текстовое поле ASP.NET не меняет значение

Вот пример:

protected void Page_Load(object sender, EventArgs e) 
    { 
     TextBox txtBox = new TextBox(); 
     txtBox.ID = "newButton"; 
     form1.Controls.Add(txtBox); 
     txtBox.Text = "initialVal"; 

     if (IsPostBack && Session["change"] == null) 
     { 
      txtBox.Text = "change"; 
      Session["change"] = true; 
     } 
    } 

Проблема: даже если я изменить значение с помощью кода, текстовое поле будет сохранить текст «initialVal». Я чувствую, что это связано с состоянием взгляда, но я не понимаю. Coudl кто-нибудь, пожалуйста, помогите мне здесь?

Спасибо.

+1

Лучше, если вы создадите его в событии Init. – Caveman

ответ

1

Everytime You загрузите страницу, на которой она запущена:

txtBox.Text = "initialVal"; 

Вы должны обернуть это в чек на постбэка:

if (!Page.IsPostback) 
{ 
    txtBox.Text = "initialVal"; 
} 

Тем не менее, onLoad является неправильным событие, чтобы сделать создание, для того, чтобы быть действительным в достаточно рано страницы жизненного цикла, использование OnInit.
См. Это article on MSDN.


Вот окончательный код от @ user2890888:

public partial class WebForm1 : System.Web.UI.Page 
{ 
    TextBox txtBox = null; 

    protected void Page_Init(object sender, EventArgs e) 
    { 
    txtBox = new TextBox(); 
    txtBox.ID = "newButton"; 
    form1.Controls.Add(txtBox); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    if (!IsPostBack) 
    { 
     txtBox.Text = "initialVal"; 
    } 

    if (IsPostBack && Session["change"] == null) 
    { 
     txtBox.Text = "change"; 
     Session["change"] = true; 
     } 
    } 
} 
+0

спасибо Николаю, я поставлю решение в тело вопроса. – mocotrah

+0

@ user2890888 Я отредактирую ответ и добавлю его, чтобы он был читабельным, если все в порядке. – NikolaiDante

+0

Все нормально. Благодарю. – mocotrah

1

Создать свой динамическое создание текстового поля в! IsPostBack

protected void Page_Load(object sender, EventArgs e) 
     { 
if(!isPostBack){ 
      TextBox txtBox = new TextBox(); 
      txtBox.ID = "newButton"; 
      form1.Controls.Add(txtBox); 
      txtBox.Text = "initialVal"; 
    } 
      if (IsPostBack && Session["change"] == null) 
      { 
       txtBox.Text = "change"; 
       Session["change"] = true; 
      } 
     } 

Спасибо и дайте мне знать, если ваш вопрос все еще в ожидании

+0

nope, в первую очередь txtBox станет локальной переменной внутри if, код не будет компилироваться. Во-вторых, даже если я выйду из «if» txtBox, он будет равен нулю. TextBox должен быть создан все время, не только на! IsPostBack. – mocotrah

0

Найти TextBox и использовать его

TextBox txtBox = (TextBox)FindControl("txtBox"); 
txtBox.Text = "change"; 
0

Даже сейчас у Вас есть вопрос, и ваш TextBox не получает значение, которое необходимо. Сохраните новое значение для TEXTBOX в скрытом поле. Я имею в виду,

if (IsPostBack && Session["change"] == null) 
{ 
    hiddenfield1.value = "change";  
} 

, а затем в вашей страницы сценария, вы можете присвоить обратно значение в этом hiddenfield1 в текстовое поле.

$(document).ready(
{ 
$('#txtBoxID').value=$('#hiddenfield1').value; 
} 
); 
Смежные вопросы