Ни одно из значений ваших серверных элементов управления не доступно для потребления в Page_Load.Эти элементы управления назначаются после проверки формы (то есть после загрузки формы) и до того, как сработают события элемента управления (например, щелчки кнопок в вашем примере).Отправленные значения находятся в коллекции Request.Form
.Посмотрите в свойстве AllKeys
, и вы увидите ключ, который оканчивается на $staff_id
, если вы используете опубликованный пример.В ключе могут быть другие символы в зависимости от того, вложен ли элемент управления в главную страницу или другой элемент управления.
Если вам абсолютно необходимо иметь это значение при загрузке страницы, выберите его из Request.Form
коллекция вместо пользовательского элемента управления, но я бы поставил под сомнение целесообразность получения значения, которое происходит в начале жизненного цикла страницы.Можно предположить захват события OnTextChanged в текстовом поле, если необходимо сохранить значение в сеансе.
РЕДАКТИРОВАТЬ - дополнительное объяснение , если вы собираетесь создать пользовательское событие для пользовательского элемента управления, естьтолько пара шагов к нему.
Создание делегата.Это будет общий объект для обмена сообщениями между контролями.
public delegate void StaffIdChangedEvent(object sender, string staffId);
Объявите событие с использованием этого делегата в пользовательском элементе управления, который будет транслироваться.
public event StaffIdChangedEvent StaffIdChanged;
В вашем пользователеконтроль, когда вы готовы к трансляции (скажем, из события OnTextChanged текстового поля Staff_id), вы просто вызываете событие [Как правило, рекомендуется проверить, является ли событие пустым]
this.StaffIdChangedEvent(this, "staff-id-value-here");
Окончательный вариантшаг состоит в том, чтобы связать событие пользовательского управления с обработчиком событий (это предотвращает нулевую ситуацию, о которой я упоминал выше при попытке вызвать событие).Вы можете подключить обработчик к странице хоста.
this.form_staffinfo.StaffIdChangedEvent += this.some_method_on_page;
Просто убедитесь, что метод на странице имеет ту же сигнатуру метода, что и делегат, используемый для объявления события.
События также могутбыть подключен к каждому элементу управления, который должен знать о них (поиск делегатов многоадресной рассылки), так что вы можете сделать что-то вроде:
this.form_staffinfo.StaffIdChangedEvent += this.some_method_on_page;
this.form_staffinfo.StaffIdChangedEvent += this.some_control_on_the_page;
this.form_staffinfo.StaffIdChangedEvent += this.some_other_control_on_the_page;
В любом случае, я обычно предпочитал делать этот тип проводки на страницеМетод OnInit.
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
InitializeComponent();
}
и просто напишите свой собственный метод InitializeComponent, чтобы централизовать любую проводку, которую вам нужно сделать.