У меня есть базовый TextBox на пользовательском элементе управления, который я загружаю динамически.Я понял, как вставить значение в этот TextBox.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить введенное значение из этого TextBox.
Мне пришлось создать класс для передачи переменных в / из динамически загружаемого элемента управления.Я назвал его PBUserControl.
public class PBUserControl : UserControl
{
public IList<NVP> NameValuePairs { get { return _NameValuePairs; } }
public class NVP
{
public NVP() { }
public NVP(string name, string value)
{
this.Name = name;
this.Value = value;
}
public string Name { get; set; }
public string Value { get; set; }
}
}
Кажется, это прекрасно работает для отправки данных в пользовательский элемент управления.
Мой динамически загружаемый пользовательский элемент управления:
public partial class Basic : PBUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack == false)
{
this.InitializeControl();
}
else
{
this.ProcessSubmit();
}
}
private void InitializeControl()
{
DynamicLiteral.Text = "Some Dynamic Content. " + GetNameValue("TestContent");
TestTextBox.Text = GetNameValue("Test");
}
private void ProcessSubmit()
{
AddNameValuePair("TestContent", "Passing back some value... "+ DynamicLiteral.Text);
AddNameValuePair("Test", TestTextBox.Text);
}
}
ЗдесьЭта страница вызывает и включает этот динамически загружаемый элемент управления:
public partial class PageAddEdit : PageBase
{
private PBUserControl _PBUserControl;
protected void Page_Load(object sender, EventArgs e)
{
// Must always desigante the control here else it dissapears.
Control TemplateUserControl = LoadControl("~/Administrator/PageBuilder/Templates/Basic.ascx");
_PBUserControl = (PBUserControl)TemplateUserControl;
_PBUserControl.AddNameValuePair("TestContent", "It is working!!!!!!!!!");
_PBUserControl.AddNameValuePair("Test", "Some test text.");
Template.Controls.Add(TemplateUserControl);
}
protected void MenuGroupRadMenu_Clicked(object sender, EventArgs e)
{
IList<PBUserControl.NVP> nvp = _PBUserControl.NameValuePairs;
}
}
Позвольте мне объяснить, что здесь происходит.Я могу установить значения в PBUserControl с главной страницы.Он отлично переходит в динамически загружаемый пользовательский элемент управления.Делает то, что должен делать.Работает замечательно.
Однако событие page_load в динамически загружаемом элементе управления запускается до обработки переменных обратной передачи.Поэтому на данный момент содержимое TextBox еще даже не читается.Я выяснил это с помощью исследований.Кроме того, если я помещаю событие Pre_Rendered в динамически загружаемый элемент управления, я могу увидеть значение TextBox при пошаговом выполнении кода с помощью отладчика.Кроме того, с помощью отладчика я вижу, что TextBox не читается во время события Page_Load.Мои исследования привели меня к следующему: 1. Событие Page_Init вызывается 2. Событие Page_Load вызывается 3. Переменные формы страницы читаются и обрабатываются (не уверен, какое событие) 4. Вызываются пользовательские события, т.е.: OnClick 5. Вызывается событие Pre_Rendered.
Мне нужно иметь возможность создать событие, которое будет вызываться после шага 3 и до или во время шага 4. Таким образом, я могу захватить значение TextBox и установить его значение в переменной PBUserControl.NVP, чтобы ономожно прочитать на главной странице.Если я вручную установлю значение в переменной PBUserControl.NVP, оно будет видно на главной странице и читается просто отлично.
Заранее спасибо.