#c# #asp.net
#c# #asp.net
Вопрос:
У меня возникла небольшая проблема при попытке динамического добавления элемента управления веб-пользователя на страницу ASPX, я прочитал о жизненном цикле страницы и увидел несколько предложений по добавлению динамических элементов управления как можно раньше в жизненный цикл страницы. На данный момент элементы управления создаются для события PreInit, как следующий блок кода:
protected override void OnPreInit(EventArgs e)
{
if (!Page.IsPostBack)
{
lstQuestions = new List<ucQuestion>();
Session["listQuestionss"] = lstQuestions;
ucQuestion q = null;
for (int i = 0; i < MIN_QUESTIONS; i )
{
q = LoadControl("~/UserControls/Exam/ucQuestion.ascx") as ucQuestion;
q.ID = String.Format("Question{0}", listQuestions.Count 1);
listQuestions.Add(q);
}
}
else
{
if (Session["listQuestions"] != null)
{
listQuestions = Session["listQuestions"] as List<lstQuestions>;
}
else
{
Response.Redirect("~/Views/HR/Exams/AddExam.aspx");
}
}
base.OnPreInit(e);
}
И затем при запуске у меня есть следующее:
protected override void OnInit(EventArgs e)
{
foreach (ucQuestion q in lstQuestions)
{
divQuestions.Controls.Add(q);
}
base.OnInit(e);
}
Пользовательский элемент управления ucQuestion имеет несколько меток, несколько текстовых полей и файловую загрузку с кнопкой для сохранения опубликованного файла. когда я нажимаю кнопку, страница отправляется обратно, но точка останова в моем коде никогда не попадает, короче говоря, мне нужно знать, что я что-то делаю неправильно, покадобавление элемента управления, который не привязывает элементы управления к их соответствующим событиям. если я добавлю пользовательский элемент управления статически, события будут работать нормально, просто пользователь может добавить столько вопросов к экзамену, сколько сочтет нужным, поэтому я должен добавлять их динамически.
Ответ №1:
Вам нужно добавить элементы управления ранее в жизненном цикле страницы, OnInit
например. Кроме того, убедитесь, что элементам управления присваивается один и тот же идентификатор каждый раз, когда страница отправляется обратно.
Другой вариант — использовать DynamicControlsPlaceHolder
, который будет автоматически управлять сохранением динамических элементов управления, не требуя никакого дополнительного кода:
http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx
Комментарии:
1. Спасибо, элементы управления добавляются на ранних этапах жизненного цикла страницы, я попытался добавить их в init, и они ведут себя так же, как и сейчас, когда они генерируются методом Load в PreInit (даже раньше, чем раньше). События по-прежнему не запускаются.