Я пытаюсь динамически строить таблицы с текстовым полем и кнопкой в каждой таблице. Таблицы добавляются успешно, но когда я нажал на кнопку, он сделал сообщение обратно на страницу, и таблицы исчезли. Поэтому я строю каждую таблицу внутри updatePanel, но когда дважды была нажата кнопка, снова была сделана обратная передача. Как я могу предотвратить переход? и затем, как мне получить значение внутри текстовых полей? TNX очень много!Как создавать текстовые поля и кнопки динамически и получать значение из каждого текстового поля в C#?
private void addTable(List<fileSaving> fs)
{
foreach (fileSaving f in fs){
UpdatePanel up = new UpdatePanel();
up.ID = "UpdatePanel-"+f.FileName;
up.UpdateMode = UpdatePanelUpdateMode.Conditional;
Table T = new Table();
T.CssClass = "filesTBL";
TableRow hTR = new TableRow();
TableCell td1 = new TableCell();
Image fileImg = new Image();
fileImg.ImageUrl = "images/"+f.FileExtension+".png";
td1.Controls.Add(fileImg);
hTR.Cells.Add(td1);
TableCell td2 = new TableCell();
td2.Text = f.ExpName;
hTR.Cells.Add(td2);
TableCell td3 = new TableCell();
Image expImg = new Image();
expImg.ImageUrl = "images/magnet.png";
td3.Controls.Add(expImg);
hTR.Cells.Add(td3);
T.Rows.Add(hTR);
TableRow mTR = new TableRow();
TableCell td4 = new TableCell();
td4.Text = "";
mTR.Cells.Add(td4);
TableCell td5 = new TableCell();
td5.Text = f.TeamID.ToString();
mTR.Cells.Add(td5);
TableCell td6 = new TableCell();
Image teamImg = new Image();
teamImg.ImageUrl = "images/team3.png";
td6.Controls.Add(teamImg);
mTR.Cells.Add(td6);
T.Rows.Add(mTR);
TableRow lTR = new TableRow();
TableCell td7 = new TableCell();
HyperLink downloadLink = new HyperLink();
downloadLink.Attributes.Add("href", "http://proj.ruppin.ac.il/igroup39/test2/tar5/tar5.zip");
downloadLink.ImageUrl = "images/download2.png";
downloadLink.ToolTip = "לחץ להורדה";
td7.Controls.Add(downloadLink);
lTR.Cells.Add(td7);
TableCell td8 = new TableCell();
if (f.ReportGrade != -1)
{
td8.Text = f.ReportGrade.ToString();
}
else
{
TextBox tb = new TextBox();
tb.ID = f.FileName + "-tb";
gFN = tb.ID;
tb.Width = 40;
td8.Controls.Add(tb);
Button btn = new Button();
btn.ID = f.FileName + "-btn";
btn.Text = "הזן ציון";
btn.Click += new EventHandler(btn_Click);
td8.Controls.Add(btn);
}
lTR.Cells.Add(td8);
TableCell td9 = new TableCell();
Image gradeImg = new Image();
gradeImg.ImageUrl = "images/grade.png";
td9.Controls.Add(gradeImg);
lTR.Cells.Add(td9);
T.Rows.Add(lTR);
up.ContentTemplateContainer.Controls.Add(T);
Page.Form.Controls.Add(up);
}
}
protected void btn_Click(object sender, EventArgs e)
{
if (!IsPostBack)
{
Button mybtn = (Button)sender;
Response.Write(mybtn.ID);
}
}
Можете уточнить для меня два вопроса? Во-первых, почему вы добавили UpdatePanel? Решает ли она конкретную проблему, или это просто то, что вы хотите как часть функционального дизайна страницы? Во-вторых, какова проблема с нажатием кнопки дважды? Я бы ожидал, что нажатие кнопки приведет к обратному сообщению. Это вызывает проблему? –
Что касается более широкого вопроса, основным моментом, с которым вы, вероятно, сталкиваетесь, является один из сроков. Когда вы вызываете метод 'addTable()'? Данные обратной передачи и информация о просмотре привязаны к элементам управления _after_ 'Init', но _before_' Load'; как таковой, важно, чтобы вы вызывали 'addTable()' во время события 'Init'. Затем управляющие события запускаются сразу после загрузки. В MSDN есть хорошая статья, суммирующая [Жизненный цикл страницы веб-форм ASP.NET] (https://msdn.microsoft.com/en-us/library/ms178472). –
Я добавил панель обновления, потому что я хотел предотвратить refrefsh для страницы, когда была нажата кнопка. Но он доцент решил проблему ... –