Как имитировать обратную передачу во вложенных пользовательских элементах управления?
-
03-07-2019 - |
Вопрос
Я делаю приложение asp.net с одной страницей.На этой странице у меня определен один пользовательский элемент управления.Этот пользовательский элемент управления имеет меню (три кнопки) и 3 пользовательских элемента управления.В зависимости от нажатой кнопки один из трех пользовательских элементов управления становится видимым истинным или ложным.
В этих трех пользовательских элементах управления у меня есть кнопка и сообщение, и я хочу показать сообщение «Это НЕ обратная передача» при нажатии кнопки меню, а при нажатии кнопки пользовательского элемента управления сообщение будет «ДА, это постбек!!!".
Вопрос в том, что при использовании свойства «IsPostBack» пользовательского элемента управления или страницы сообщение никогда не будет «Это НЕ обратная передача» из-за нажатия кнопки меню для отображения вложенного пользовательского элемента управления.
Вот структура страницы:
page
parent usercontrol
menu
nested usercontrol 1
message
button
nested usercontrol 2
nested usercontrol 3
Я знаю, что это можно сделать с помощью ViewState, но есть способ смоделировать свойство IsPostBack или узнать, когда происходит настоящая обратная передача пользовательского элемента управления?
Спасибо.
Решение
У меня есть решение этой проблемы.Когда элемент срабатывает, событие отправляется на сервер в коллекции Request.Form, поэтому я создал свойство во вложенных пользовательских элементах управления, которое проверяет, есть ли дочерний элемент управления (определенный в самом пользовательском элементе управления) в коллекции Request.Form:
public bool IsUserControlPostBack
{
get
{
foreach (Control c in Controls)
foreach(string key in Page.Request.Form.AllKeys)
if( c.ClientID == key.Replace('$','_'))
return true;
return false;
}
}
Этот код может быть свойством пользовательского элемента управления или, если он вызывается много раз, переменной, устанавливаемой в событии OnInit пользовательского элемента управления.