2012-03-14 2 views
2

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

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

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

Пример:

Если это первый раз, когда UC называется в пределах страницы, мне нужно querythe DB, а также внешние перемычки и связать элементы управления на 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

+0

Определения " первый раз". Первый раз в вашей заявке? Первый раз для этого пользователя? Первый раз на этом полном обновлении страницы (т. Е. Через ajax). Что такое первый раз в веб-среде? – Stilgar

ответ

2

Ok Я использовал 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 { ... } 
+0

Неверное свойство ispostback в пользовательском управлении. Это лучший способ проверить, загружен ли элемент управления в первый раз. Спасибо, что поделился. – shazia

2

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

1

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

+0

Хорошо, теперь я понимаю, что IsPostback на пользовательском элементе управления, исходящего из страницы, вызывается из ... Итак, как я могу определить, является ли это первым вызовом UC? – Gotcha

+0

Я боюсь, что нет встроенного способа сказать, но вы можете установить переменную сеанса, используя имя элемента управления, и установить значение true. Если он существует, элемент управления уже загружен, иначе он его не имеет. –