Как сделать так, чтобы содержимое всплывающего окна делало PostBack только тогда, когда оно появилось - PullRequest
0 голосов
/ 29 января 2011

У меня пользовательский элемент управления отображается через всплывающее окно SimpleModal (JQuery), этот пользовательский элемент управления получает некоторые данные из базы данных и отображает их (сведения о записи).

Проблема заключается в том, чтопользовательский элемент управления выполняет обход и получает данные каждый PostBack для родительской страницы, даже если она скрыта.

Интересно, смогу ли я сделать так, чтобы она получала свои данные только при появлении всплывающего окна.

Я попытался поместить его в свойство Panel с false для Visible и изменить его на true при открытии всплывающего окна, но он по-прежнему вызывает Page_Load, который получает данные из базы данных!

Любая идея !!

Ответы [ 2 ]

2 голосов
/ 29 января 2011

Существует несколько подходов к решению этой проблемы.

1.Все все на стороне сервера. Вы можете использовать модальный дилог Ajax (бывший атлас). Поместите это в панель обновления. Создайте триггер и укажите событие в этом триггере - это будет, когда вы будете делать вызов в БД. Это произойдет только один раз, и вы сможете контролировать, когда именно вы захотите это сделать.

2. Используйте клиентскую сторону ajax. Я предпочитаю этот способ, так как есть много накладных расходов, связанных с использованием UpdatePanel (производительность). Держите модальный диалог jQuery UI в такте, используйте событие на стороне клиента, чтобы подключиться к нему при его открытии. Затем вам нужно будет либо выполнить .ajax-вызов веб-службы (может быть размещен на странице aspx), либо вы можете сделать .get:

    $.ajax({
      url: url,
      data: data,
      success: success,
      dataType: dataType
    });

или

   $.get('ajax/MyDbRecord.aspx', function(data) {
       $('.result').html(data);
        alert('Load was performed.');
   });

Тогда ваша страница aspx может просто:

Response.Write (MyRepository.GetDetail (q => q.ID == 1234) .ToString ()); Resonse.End ();

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

Оба API описаны здесь подробно: http://api.jquery.com/jQuery.get/

Теперь, если вы действительно хотите сделать что-то особенное с подробной записью, которую вы извлекаете из базы данных, вы можете захотеть изучить использование getJSON. Больше примеров здесь:

http://viralpatel.net/blogs/2009/04/jquery-ajax-tutorial-example-ajax-jquery-development.html

1 голос
/ 29 января 2011

Запустить ajax-запрос, когда пользователь активирует всплывающее окно и заполняет всплывающее окно значениями, полученными из запроса.

...