У меня возникла проблема с получением элементов управления/элементов управления, которые я создал вручную из кода позади. после исследования я обнаружил, что если я создам таблицу и весь ее компонент, включая любые элементы управления в методе Page_Init(), при рендеринге после обратной передачи текстовое значение элемента управления текстовыми полями должно быть доступно на странице. Я попытался найти элемент управления текстовым полем с помощью метода FindControl(). при отладке ее достигают только к линии, где я попытался найти элемент управления с помощью FindControl(), а затем выбросить исключение «объекта не задана ссылка на экземпляр объекта» ниже методне удается найти элементы управления из кода позади.
protected void Page_Init(object sender, EventArgs e)
{
Table tb = new Table();
tb.ID = "Table1";
TableRow row1 = new TableRow();
TableCell cell1 = new TableCell();
TableCell cell2 = new TableCell();
TableCell cell3 = new TableCell();
TextBox txtbx = new TextBox();
Button btn = new Button();
cell1.Text = "Name: ";
txtbx.ID = "table1_text_input";
txtbx.ValidationGroup = "rosy";
cell2.Controls.Add(txtbx);
btn.Text = "Get the input";
btn.ValidationGroup = "rosy";
btn.Click += getBoxinput_Click;
cell3.Controls.Add(btn);
// adding cells to row1
row1.Cells.Add(cell1);
row1.Cells.Add(cell2);
row1.Cells.Add(cell3);
// adding row to table1
tb.Rows.Add(row1);
Panel1.Controls.Add(tb);
}
Page_Init() ниже - событие нажатия кнопки, которое предполагает отображение идентификатора элемента управления и его текста. Я застрял с этим последние пару дней. любая помощь будет оценена.
protected void getBoxinput_Click(object sender, EventArgs e)
{
try
{
if (IsPostBack)
{
Table t = (Table)Page.FindControl("Panel1").FindControl("Table1");
TextBox tbox;
foreach (TableRow tr in t.Rows)
{
foreach (TableCell tc in tr.Cells)
{
foreach (Control cnt in tc.Controls)
{
if (cnt.GetType() == typeof(TextBox))
{
tbox = (TextBox)cnt;
display.Text += "control id: " + tbox.ID + " control input: " + tbox.Text + "<br/>";
}
}
}
}
}
}
catch (NullReferenceException ex)
{
display.Text += ex.Message;
}
}
оба метода в этом классе. но когда вы говорите, что все средства управления в глобальном масштабе вы делаете, как вы это делаете? если это не слишком много, чтобы спросить, не могли бы вы показать мне какой-то код, который демонстрирует, чтобы вытащить все элементы управления со страницы. извините, я все еще учился. –
Я всегда на шаг впереди, я думаю. извините, что после того, как вы рассказали мне о том, как вытащить элементы управления из глобального масштаба, я провел некоторое исследование и нашел то же, что и вы объяснили здесь. огромное спасибо за это. но, к сожалению, возникла новая проблема, которая возникает, когда я добавляю эту таблицу в панель, которая уже находится в файле .aspx, а не в коде за файлом, и выдает ошибку. и не позволяйте мне добавлять таблицу к панели. он бросает ту же ошибку, что и до того, как «ссылка на объект не установлена в экземпляр объекта». Атрибут панели «runat» уже установлен на «server». –
К сожалению, у меня нет большого опыта работы с ASP.NET, и поскольку ваша ошибка упоминает ' атрибут «runat» уже установлен на «server». Я предполагаю, что теперь что-то связано с ASP.NET, а не с C#. Мое лучшее предположение заключалось бы в изменении значения свойства «runat» на нечто иное, чем «server», а затем измените его на «сервер». Извините, я не могу больше использовать здесь. – Agustin0987