2013-07-12 6 views
2

Я хочу создавать динамические текстовые поля во время выполнения. Пусть им gettng текст из базы данных, как «# является столицей Индии» Сейчас я хочу заменить, что «#» на текстовом поле в то время как она предоставляется пользователю, как показано нижеДинамические элементы управления (текстовое поле) в asp.net

<asp:TextBox runat="server" id = "someid"></asp:TextBox> is the capital of India 

Im смог получить текстовое поле и текст в виде комбинации. Однако я не могу получить доступ к текстовым полям с данным идентификатором, и когда на странице происходит какое-либо событие, текстовые поля теряются, поскольку они логически не существуют, пока их состояние не будет сохранено.

Я также рассмотрел концепции держателя места и Viewstate для хранения динамически созданных элементов управления и сделать их идентификаторы доступными для методов, но насколько я пытался, я не мог выполнить требование текстового поля и текстовой комбинации.

Im зацикливание на весь текст, полученный из базы данных, и проверка наличия «#». Да, тогда я хочу заменить его текстовым полем, на котором я могу вызывать методы, чтобы вернуть значение, введенное в текстовое поле, в базу данных и сохранить его.

например: текст «#» является столицей Индии

for (int i = 0; i < que.Length; j++) //que holds the text 
     { 
      if (que[i] == '#') 
      { 
        //Textbox should be created 
      } 
      else 
      { 
        //the texts should be appended before or after the textbox/textboxes as text demands 
      } 
     } 

На кнопке мыши Я передаю запрос в базу данных, которая будет посылать мне необходимые детали, то есть вопрос текста, опции, а также экономит ток проверенное значение и т. д.

protected void BtnLast_Click(object sender, EventArgs e) 
{ 
    CheckBox1.Checked = false; 
    CheckBox2.Checked = false; 
    CheckBox3.Checked = false; 
    CheckBox4.Checked = false; 

    QuestionSet q = new QuestionSet(); 
    StudentB b = new StudentB(); 

    q = b.GetQuestion(1, 1, qid, 'L', 0, Checked, date); 

    qid = Convert.ToInt32(q.Question_Id); 
    Checked = q.Checked; 

    if (q.Question_Type == 11) //indicates its objective Question 
    { 
     //ill bind data to checkboxes 
    } 
    else if (q.Question_Type == 12) // indicate its fill in the blanks question 
    { 
     for (int j = 0; j < que.Length; j++) 
     { 
      if (que[j] == '#') 
      { 
        count++; 
        string res = "<input type = 'text' runat = 'server' id ='TxtBoxFillUp" + count + "'/>"; 

        htm = htm.Append(res); 

      } 
      else 
      { 
        htm = htm.Append(que[j]); 
      } 
     } 

    } 

} 

Любая помощь будет принята с благодарностью, спасибо заранее.

+0

Вы создаете текстовые поля внутри события PageLoad? Вы использовали какие-либо условия, такие как:! IsPostBack? Пожалуйста, покажите свой код/​​код PageLoad, создавая TextBox динамически. –

+0

Мне жаль, что я не упомянул об этом раньше, мне нужны текстовые поля, которые нужно создать при нажатии кнопки, при нажатии кнопки im, вызывающей его метод, который будет вызывать параметры бизнес-метода, которые будут перемещаться до базы данных и делать 2 вещи 1) Сохранять текущий ток ответ 2) Возьмите следующий вопрос, теперь, когда следующий вопрос заполняет тип пробелов, мне нужны текстовые поля, которые будут созданы для репликации пробела .....могу ли я получить помощь по этому поводу, спасибо –

ответ

2

Добавление контроля в том виде, в котором вы его выполняете, не создаст элемент управления, поскольку asp.net его создает. Вам нужно создать элементы управления как обычно .net-объект.

TextBox myNewTextBox = new TextBox() {}; 
// Set all initial values to it 

И добавьте этот котрол к заполнителю или панели, независимо от того, что вы используете. Имейте в виду, что события страницы asp.net срабатывают, даже если вы используете панель обновления, поэтому, чтобы поддерживать состояние и события новых созданных элементов управления, вы заботитесь о создании таких элементов управления задолго до того, как произойдет событие события Load. Here - это мой ответ на другой аналогичный вопрос.

+0

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

+0

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

1

Видя требования у вас есть:

1.) Вы должны использовать JavaScript. Поскольку ASP.NET не будет воссоздавать элементы управления, которые динамически добавляются. Динамически добавленные элементы управления необходимо воссоздавать после каждой обратной передачи. Вот почему ваши текстовые поля теряются после каждой обратной передачи.

2.) Вы можете написать код JavaScript для скрытия и отображения текстовых полей для пустых текстов, так как при каждом нажатии кнопки вы можете вызывать функции на стороне клиента, используя свойство OnClientClick() кнопок.

3.) Также, чтобы получить текстовые поля с использованием свойства ID, добавьте их в часть разметки (.aspx).

+0

Спасибо @FlopScientist Ур подход был новый, думаю, я могу использовать его, где ..... –

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