У вас есть несколько вариантов, но вы не можете использовать ретранслятор для этого.
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>");
}