C #: динамический пользовательский элемент управления IsPostback, возвращающий истинное событие, хотя UC загружается в первый раз - PullRequest
2 голосов
/ 14 марта 2012

У меня есть страница с динамическим пользовательским элементом управления в качестве заполнителя. Когда я загружаю страницу, она загружает UC (назовем его «OrigUC») по умолчанию. На этой странице у меня есть кнопка, которая заменила UC на другой «NewUC». Поэтому эта кнопка выполняет обратную передачу с использованием ajax и заменяет UC.

В NewUC, в моей Page_Load я проверяю IsPostBack (), но по какой-то причине, даже если я загрузил UC в первый раз, он все равно возвращает мне true. Почему он возвращает true, я думал, IsPostBack вернет ли UC, так как я проверяю его внутри Page_Load UC. Я что-то упустил?

Хорошо, теперь я понимаю больше IsPostback для пользовательского элемента управления, поступающего со страницы, с которой он вызывается ... Так как я могу определить, является ли это первый раз, когда UC вызывается со страницы?

Пример:

Если это первый раз, когда UC вызывается на странице, мне нужно запросить БД, а также внешний WebS и связать элементы управления на UC. Если я запускаю частичную обратную передачу, я не хочу снова запрашивать БД и WebS.

If (!IsUserControlPostBack) 
{ 
// Step 1 Init of UC 
// Call to DB 
// Call to WebS 
} 
else 
{ 
// A Post back occured ...  
// It can be Page who triggered it or UC and I do not want to call Step 1 again 
// DO something else. 
}

C

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Хорошо. Я использовал ViewState для сохранения флага, который я установил при загрузке пользовательского элемента управления при первом входе.

Надеюсь, это поможет другой нуб, как я:)

    private bool IsUCPostBack
    {
        get
        {
            object o = ViewState["S2UC"];
            return o == null;
        }
        set
        {
            ViewState["S2UC"] = true;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsUCPostBack)
        {
            IsUCPostBack = true; ... } else { ...   }
2 голосов
/ 14 марта 2012

Свойство IsPostBack определяет, был ли запрос POST HTTP-запросом, если ваш элемент управления что-то сделал.Поскольку страница была отправлена ​​с помощью кнопки, запрос является запросом PostBack (в терминах ASP.NET).По сути, это свойство не делает то, что, как вы думаете, оно делает, и на самом деле никак не связано.

1 голос
/ 14 марта 2012

Кнопка выполняет «обратную передачу». IsPostBack имеет значение true для объекта Page, в который загружается пользовательский элемент управления.

...