2013-11-19 5 views
0

У меня есть веб-страница, которая занимает несколько минут, чтобы загрузить. Причиной этого было то, что эта страница состояла из вида сетки ASP.NET и привязки данных для этой сетки, занимающей много времени.load asp.net вид сетки из асинхронного вызова

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

В качестве решения для этого я придумал идею загрузки вида сетки без подсчетов этой конкретной записи сетки (Удалите операцию подсчета из хранимой процедуры извлечения данных). И обновите метку счета каждой записи сетки асинхронным вызовом на сервер.

Может ли кто-нибудь понять, как именно я могу реализовать это решение с помощью grid-view asp.net?

+0

Является ли пользовательский пейджинг опцией? Где вы загружаете первую, скажем, 10 записей вместо всех записей? Я не имею в виду встроенный поисковый вызов, потому что он загружает весь набор данных, а затем просто показывает первую страницу, что не поможет вашему ситутации. –

+0

Я уже использую пользовательскую подкачку. Файлы будут загружаться в соответствии с выбранным пользователем параметром размера страницы. Я думаю, что проблема возникает при вычислении отсчетов из хранимой процедуры. Вот почему я подумал об удалении этой части счета из пакета загрузки данных и обновления счетчиков с использованием асинхронного вызова. – Ashan

ответ

2

Веб-страница с привязкой данных к управлению GridView может занять много времени. Страница не отображается до тех пор, пока все элементы управления не будут выполнены, и GridView не сможет выполнить рендеринг до того, как данные будут извлечены из базы данных. Итак, давайте загрузим асинхронный GridView и сделаем загрузку страницы быстрее, а воспринимаемая скорость больше.

Этот небольшой трюк на самом деле очень прост и включает встроенную функцию обратного вызова клиента ASP.NET. Несмотря на то, что я не большой поклонник этой функции, время от времени она может быть очень удобной. Лучшая часть этого заключается в том, что вам не нужно сильно менять существующий код. Веб-страница

На веб-странице, на которой размещен элемент управления GridView, вы должны внести 2 небольших изменения.

Шаг 1. инкапсулировать GridView Элемент GridView управления должен быть воплощен с помощью элемента управления HTML с идентификатором атрибута, так что он может ссылаться на JavaScript. Это связано с тем, что GridView не отображает, когда к нему не привязаны данные.

<div id="grid"> 
<span>Loading...</span> 
<asp:GridView runat="Server" ID="gvAsync" /> 
</div> 

Шаг 2. Добавить JavaScript Затем JavaScript необходим для загрузки тонированные и данные связаны GridView на который мы добавили в шаге 1. Помести JavaScript ниже GridView своего окружения Div тега элемент управления HTML.

<script type="text/javascript"> 
function EndGetData(arg) 
{ 
document.getElementById("grid").innerHTML = arg; 
} 

setTimeout("<asp:literal runat="server" id="ltCallback" />", 100); 
</script> 

Code-за

В файл кода есть три небольшие шаги для выполнения.

Шаг 3. Реализация ICallbackEventHandler Нам необходимо реализовать интерфейс, чтобы включить функцию обратного вызова клиента.

public partial class asyncgridview : System.Web.UI.Page, ICallbackEventHandler 

Шаг 4. Привязка обратного вызов ссылка Буквальное управление помещены в функции JavaScript в шаге 2 должно содержать ссылку клиента обратного вызова. Добавьте в страницу_Load следующее.

if (!Page.IsCallback) 
ltCallback.Text = ClientScript.GetCallbackEventReference(this, "'bindgrid'", "EndGetData", "'asyncgrid'", false); 

Шаг 5. Bind сетка и вернуть обработанную HTML Для завершения асинхронной загрузки, мы должны реализовать два метода, которые определяются с помощью интерфейса ICallbackEventHandler мы реализовали на шаге 3. Один из способов связывает DataTable с GridView и отображает элемент управления. Вторые возвращает тонированное HTML методы JavaScript мы определили в шаге 2.

privatestring _Callback; 

publicstring GetCallbackResult() 
{ 
return _Callback; 
} 

publicvoid RaiseCallbackEvent(string eventArgument) 
{ 
DataTable table = RetrieveDataTableFromDatabase(); 
gvAsync.DataSource = table; 
gvAsync.DataBind(); 

using (System.IO.StringWriter sw =new System.IO.StringWriter()) 
{ 
    gvAsync.RenderControl(new HtmlTextWriter(sw)); 
    _Callback = sw.ToString(); 
} 
} 

Вы можете использовать существующие данные методы связывания для связывания GridView. Важная часть состоит в том, что GridView связан с данными перед тем, как метод RaiseCallbackEvent отображает элемент управления.

Та же методика может использоваться для всех данных, таких как Repeater, FormView и DataList.

Код: http://madskristensen.net/post/Asynchronous-GridView-in-5-simple-steps

Смежные вопросы