Как имитировать обратную передачу во вложенных пользовательских элементах управления?

StackOverflow https://stackoverflow.com/questions/801812

  •  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 пользовательского элемента управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top