Передача значения между пользовательскими веб-элементами управления - DifferentQuestion - PullRequest
1 голос
/ 18 декабря 2008

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

Пример того, что я сделал:

Управление пользователями отдела (с кодом)

        protected void Page_Load(object sender, EventArgs e)
        {
            int productId = ProductUserControl.selectedProductId;
            ... doing some bind work with productId


        }

Контроль пользователя продукта

        public static int selectedProductId;
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void lvDepartments_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
        if (e.CommandName == "selectDepartment")
           {
              selectedProductId = int.Parse(e.CommandArgument);
           }
        }

Заранее спасибо ...

Ответы [ 2 ]

1 голос
/ 18 декабря 2008

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

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

Еще один способ сделать это - установить для контроля пользователей продукта открытое свойство в пользовательском контроле отдела, вместо того чтобы пользовательский контроль департамента пытался прочитать свойство в пользовательском контроле продукта.

Проблема, похоже, связана с проблемой жизненного цикла страницы. http://www.robincurry.org/blog/content/binary/o_aspNet_Page_LifeCycle.jpg

Я уверен, что есть и лучший способ.

0 голосов
/ 09 марта 2010

Попробуйте использовать делегатов, чтобы добиться этого более четко, например здесь

...