Пользовательский элемент управления Page_Load не читает переменную, переданную с главной страницы - PullRequest
1 голос
/ 02 ноября 2011

У меня проблема с передачей переменной с главной страницы, содержащей пользовательский элемент управления, в сам пользовательский элемент управления.Хотя переданная переменная обычно доступна в выделенном для кода пользовательском элементе управления, событие page_load, похоже, не может его прочитать.

Мой код -

В выделенном фрагменте главной страницы:

protected void FindCCFsButton_Click(object sender, EventArgs e)
    {
        if (CustomerDropDown.SelectedIndex != 0)
        { SearchUcCCFList.SetCustID(CustomerDropDown.SelectedValue); }
    }

(SearchUcCCFList - это экземпляр пользовательского элемента управления на главной странице aspx).В коде пользовательского элемента управления:

public partial class ucCCFList : System.Web.UI.UserControl
{
    public string srchCust { get; set; }

    public void SetCustID(string custID)
    {
        srchCust = custID;
        testCustLabel.Text = GetCustID(); //this works
    }

    public string GetCustID()
    {
        return srchCust;
    }

protected void Page_Load(object sender, EventArgs e)
    {
        CCFGridView.DataSource = DAL.SearchCCFs(custID : GetCustID());  //doesn't work
        CCFGridView.DataBind();
        test2CustLabel.Text = GetCustID();  //doesn't work
    }

В событии Page_Load GetCustId () ничего не возвращает (поэтому записи не фильтруются и все возвращаются), хотя его можно прочитать в методах внеPage_Load.

Возможно, я делаю ошибку для начинающих, но любая помощь будет признательна.

Редактировать - следуя совету Алана в комментариях, я прошел последовательность загрузки страницы, и кажется, чтоСобытие Page_Load пользовательского элемента управления запускается ДО того, как код нажмет кнопку главной страницы, поэтому переменная еще не доступна.Последовательность после нажатия кнопки:

  1. Пользовательский элемент управления Page_Load запускается
  2. Код события кнопки на главной странице
  3. Другой код (вне Page_Load) в пользовательских элементах управления запускаетсяследовательно, переменная доступна здесь.

Это кажется немного странным, есть ли другой способ передать переменную в пользовательские элементы управления Page_Load?

1 Ответ

1 голос
/ 02 ноября 2011

В этом случае обработка вашего клика даже на главной странице вызывается после вызова загрузки пользовательской страницы управления. Ваша переменная устанавливается, но только после после привязки данных в пользовательском элементе управления.

Либо переключите пользовательский элемент управления на декларативное связывание, которое будет обрабатывать вызывающие методы в правильном для вас порядке. В этом случае проще всего изменить привязку данных пользовательского элемента управления с Page_Load на Page_PreRender, которая вызывается позже в жизненном цикле после вызова обработки главной страницы.

protected void Page_PreRender(object sender, EventArgs e)
{
    CCFGridView.DataSource = DAL.SearchCCFs(custID : GetCustID());  // will work now
    CCFGridView.DataBind();
    test2CustLabel.Text = GetCustID();  // will work now
}

Для более подробного ответа прочитайте о жизненном цикле страницы ASP.NET, включая взаимодействие с жизненным циклом пользовательских элементов управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...