Представьте себе следующий сценарий - у нас есть Page1, которая содержит элементы управления Control A и Control B.
Скажите, что у Control A есть кнопка, и при нажатии этой кнопки мы хотим, чтобы Control B реагировал.
Но мы хотим сделать это абстрактно, то есть у нас не может быть, чтобы Control B ничего не знал о Control A, и наоборот.
Таким образом, мы можем разработать эти элементы управления изолированно и управлять ими путем модульного тестирования.
Теперь, я думал, что у меня есть решение, просто хочу знать, что вы, ребята, думаете об этом.
При нажатии кнопки Control A я помещаю «сообщение» в Сессию, то есть Session ["MESSAGES"] = "ControlA_Click".
В Page1, в Page_LoadComplete (), я помещаю вызов ProcessMessages, который выглядит следующим образом:
List<Message> messages = SessionMessages.GetMessageList(Page);
foreach(Message m in messages)
{
//Get Controls
ControlA controlA = FindControl("controlA") as ControlA;
controlA .ProcessMessage(m);
ControlB controlB = FindControl("controlB") as ControlB;
controlB.ProcessMessage(m);
}
в методе ControlMessage () ControlB мы можем реагировать на сообщения, которые интересуют ControlB, следующим образом:
if (m.MessageName == SessionMessages.C_MESSAGE_SEARCH)
{
this.Visible = true;
}
Мне кажется, это работает. Это позволяет нам разрабатывать эти элементы управления полностью отдельно друг от друга, в то же время допуская межконтрольную связь на абстрактном уровне.
Единственное, о чем я могу подумать, это может привести к краху - это возможно жизненный цикл ASP.NET в отношении страниц и пользовательских элементов управления. Хотя я понимаю, что ВСЕ события должны были быть обработаны в элементах управления до вызова Page_LoadComplete () на странице-владельце.
Мысли