Передача значения между пользовательскими веб-элементами управления - DifferentQuestion
Я хочу передать значения между пользовательскими веб-элементами управления без записи какого-либо кода на главную страницу, на которой размещены пользовательские элементы управления. Я делаю что-то подобное, но после этого мне нужно дважды щелкнуть, чтобы передать значение.
Пример того, что я сделал:
Управление пользователями (Code-Behind)
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 ответа
В вашем пользовательском контроле отдела вы пытаетесь получить значение selectedProductId до того, как оно будет установлено в пользовательском контроле продукта. Вот почему вы не получите ожидаемого значения, пока не отправите ответ дважды.
Вам нужно будет получить его после того, как пользовательский элемент управления установит его в событии ItemCommand. Возможно, поместив код контроля пользователя отдела в Page_LoadCompleted... хотя я не уверен, будет ли это работать тоже.
Еще один способ сделать это - установить контроль пользователя продукта в Public User Control в качестве общего свойства вместо того, чтобы пользовательский контроль Department пытался прочитать свойство в User User Control продукта.
Похоже, проблема связана с жизненным циклом страницы. http://www.robincurry.org/blog/content/binary/o_aspNet_Page_LifeCycle.jpg
Я уверен, что есть и лучший способ.
Попробуйте использовать делегатов, чтобы добиться этого более четко, пример здесь