Как я могу прочитать динамически созданное текстовое поле - PullRequest
0 голосов
/ 10 июля 2009

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

LiteralControl spacediv3 = new LiteralControl("&nbsp&nbsp");
Label  lblComText = new Label();
lblComTitle.Text = "Comment";
TextBox txtComment = new TextBox();
txtComment.Width = 200;
txtComment.TextMode = TextBoxMode.MultiLine;
phBlog.Controls.Add(lblComText);
phBlog.Controls.Add(spacediv3);
phBlog.Controls.Add(txtComment);

Button btnCommentSave = new Button();
btnCommentSave.ID = "mySavebtnComments" ;
btnCommentSave.Text = "Save ";
phBlog.Controls.Add(btnCommentSave);
btnCommentSave.CommandArgument = row["ID"].ToString();
btnCommentSave.Command += new CommandEventHandler(btnSave_Click);

protected void btnSave_Click(object sender, CommandEventArgs e)
{
    firstelement.InnerText = txtComment.text // this gives error on txtComment.text
}

Ответы [ 4 ]

1 голос
/ 10 июля 2009

Вам нужно получить ссылку на свой элемент управления в btnSave_Click. Что-то вроде:

protected void btnSave_Click(object sender, CommandEventArgs e)
{
    var btn = (Button)sender;
    var container = btn.NamingContainer;
    var txtBox = (TextBox)container.FindControl("txtComment");
    firstelement.InnerText = txtBox.text // this gives error on txtComment.text
}

Вам также необходимо установить идентификатор для txtComment и воссоздать любые динамически созданные элементы управления при обратной передаче.

0 голосов
/ 10 июля 2009

Попробуйте во время обратной передачи загрузить txtComment (с тем же идентификатором) в переопределенный метод LoadViewState после вызова base.LoadViewState. В этом случае вы загружаете его до обработки данных обратной передачи и загрузки элемента управления txtComment.

0 голосов
/ 10 июля 2009

Добавить 'ID' в текстовое поле

txtComment.ID = "txtComment"

Запрос информации из отправленной формы (если у вас есть форма на странице)

comment = Request.Form("txtComment")
0 голосов
/ 10 июля 2009

Вам понадобится какой-то механизм для создания связи между Button и TextBox, очевидно. В winforms это было бы легко, когда каждый элемент управления имеет свойство Tag, которое может содержать ссылку практически на что угодно. У веб-элементов управления нет такого свойства (о котором я знаю), но поддерживать такие отношения по-прежнему легко. Одним из подходов было бы иметь Dictionary в связи кнопки / текстового поля на странице хранения:

private Dictionary<Button, TextBox> _buttonTextBoxRelations = new  Dictionary<Button, TextBox>();

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

TextBox txtComment = new TextBox();
// ...

Button btnCommentSave = new Button();
// ...
_buttonTextBoxRelations.Add(btnCommentSave, txtComment);

... и затем вы можете посмотреть текстовое поле в событии нажатия кнопки:

protected void btnSave_Click(object sender, CommandEventArgs e)
{
    TextBox commentTextBox = _buttonTextBoxRelations[(Button)sender];
    firstelement.InnerText = txtComment.text // this gives error on txtComment.text
}
...