Я новичок в ASP.NET, немного растерялся и не знаю, нахожусь ли я на правильном подходе.
В очень большой форме я рендерил несколько таблиц с множеством полей ввода.
В aspx у меня есть это:
<tbody runat="server" id="a2_tbody" ></tbody>
В codebehind я получаю доступ к tbody и отображаю tr, td и входные данные с помощью методов, подобных этому:
private void generateA2TableRows(int num_rows, HtmlGenericControl parent) {
for(int i=0; i<num_rows; i++){
string ctrlName = String.Empty;
TableRow tr = new TableRow();
TableCell c_designacao = new TableCell();
HtmlInputText i_designacao = new HtmlInputText("text");
ctrlName = "a2_designacao_" + i;
i_designacao.ID = ctrlName;
i_designacao.Name = ctrlName;
i_designacao.Attributes.Add("class", "validate[custom[blackList]]");
c_designacao.Controls.Add(i_designacao);
tr.Controls.Add(c_designacao);
TableCell c_ss = new TableCell();
HtmlSelect seg_social = new HtmlSelect();
ctrlName = "a2_seg_social_" + i;
seg_social.Items.Insert(0, "Selecione");
seg_social.SelectedIndex = 0;
seg_social.Items.Insert(1,"Sim");
seg_social.Items.Insert(2,"Não");
seg_social.ID = ctrlName;
seg_social.Name = ctrlName;
c_ss.Controls.Add(seg_social);
tr.Controls.Add(c_ss);
TableCell c_n_utentes = new TableCell();
HtmlInputText i_n_utentes = new HtmlInputText("text");
i_n_utentes.Attributes.Add("class", "validate[custom[onlyPositiveNumbers]]");
ctrlName = "a2_n_utentes_" + i;
i_n_utentes.ID = ctrlName;
i_n_utentes.Name = ctrlName;
c_n_utentes.Controls.Add(i_n_utentes);
tr.Controls.Add(c_n_utentes);
parent.Controls.Add(tr);
}
}
Но теперь мне нужно получить доступ ко всем входам для проверки и другой обработки.
Я пробовал это так:
Этот возвращает только те htmlControls, которые я написал на aspx.
foreach (Control ctrl in Form.Controls) {
if (ctrl is HtmlControl)
{
HtmlControl htmlCtrl = ctrl as HtmlControl;
Response.Write("ID: " + htmlCtrl.ID + " CLASS = " + htmlCtrl.Attributes["class"] +" type = "+ htmlCtrl.GetType() + "<br/>");
}
}
Таким образом, я получаю визуализированные элементы, но только имя.
Я попытался восстановить идентификатор элемента и использовать метод FindControl, но «Форма» таким образом не возвращает ни одного элемента.
foreach (Object formObj in Request.Form) {
string formObjID = formObj.ToString().Replace("$", "_");
Control ctrl = Form.FindControl(formObjID);
}
Может кто-нибудь отстегнуть меня от этого?
Основная цель - просто получить доступ к визуализированным элементам, чтобы я мог проверить их и сериализовать данные в XML, и действительно не знаю, является ли это правильным подходом.
Заранее спасибо.