Визуализировать ретранслятор asp.net как и когда фрагменты HTML готовы (потоковое) - PullRequest
2 голосов
/ 22 апреля 2010

Проблема в том, чтобы создавать огромные отчеты.В основном у нас есть много данных, которые отображаются в html-отчетах (в основном с использованием ретранслятора или gridview).Так получилось, что данные начинались с малого, и теперь у нас их много.Уже создано много таких отчетов, поэтому полная перезапись невозможна.Черт, бизнес даже не позволяет нам публиковать данные.Теперь память сервера увеличивается каждый раз, когда мы пытаемся отрисовать некоторые отчеты.Таким образом, вопрос в том, есть ли какой-нибудь способ, которым мы можем связать данные с повторителем и сделать так, чтобы они транслировали html в браузер, как и когда куски готовы?Таким образом, мы надеемся, что не перенесем все эти данные на сервер приложений одновременно.Я думаю, что мы будем использовать datareader или что-то еще, чтобы получить части данных и отобразить их в браузере.Любые указатели, ссылки, идеи?

Ответы [ 3 ]

2 голосов
/ 22 апреля 2010

Это будет интересное решение для бесконечной прокрутки JQuery.

http://www.infinite -scroll.com /

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

Считайте, что это Google Reader, где вы прокручиваете каналы вниз, а затем загружаются все каналы.

0 голосов
/ 22 апреля 2010

У вас есть несколько вариантов, но вы не можете использовать ретранслятор для этого.

ASP.NET не будет выводить HTML, определенный в ASPX, пока не достигнет стадии рендеринга жизненного цикла страницы . До этого со страницей могло случиться почти все (в Page_Init, Page_Load и т. Д.): Она может добавлять или удалять элементы управления на странице, она может связывать источники данных и т. Д. Поэтому нет способа узнать, что отправить на клиент еще.

Один из вариантов заключается в создании отчета из клиента с использованием AJAX: сначала загрузите HTML-код, а затем изменяйте его с помощью дополнительных обращений к серверу до тех пор, пока не будут использованы все данные отчета. Это позволит вам разбить ваши отчеты на куски любого размера, которые вы захотите, но это может оказаться довольно сложным. (С другой стороны, может быть, кто-то уже создал элемент управления для облегчения этого.)

Другой вариант - это взять под свой контроль генерацию HTML и написать всю страницу вручную в своем классе с выделенным кодом (вместо использования удобного и легкого для чтения шаблона .aspx). Чтобы увидеть это в действии, создайте полностью пустой .aspx (кроме объявления @Page) и поместите его в метод Page_Load:

protected void Page_Load(object sender, EventArgs e) 
{
    Response.Write("<html><body><ul>");

    // this could be iterating a data reader
    for(int i=0; i<5; i++) 
    {
        Response.Write("<li>Item " + i.ToString() + "</li>");

        // you might tweak your buffer settings instead of flushing on
        // each write - this is just for demonstration purposes
        Response.Flush();

        // this just dramatizes the fact that it's streaming
        // by adding a two-second delay
        System.Threading.Thread.Sleep(2000);
    }
    Response.Write("</ul></body></html>");
}
0 голосов
/ 22 апреля 2010

В таких случаях Response.Write - ваш друг.К сожалению, вы будете отказываться от тонкостей привязки данных и повторителей.Вот ссылка http://highscalability.com/plentyoffish-architecture

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...