2013-08-29 57 views
0

我正在使用Web服務API來拉取json數據,然後將其轉換爲數據集並將數據顯示到頁面加載的REPEATER中。現在我的問題是,有沒有辦法我可以先加載頁面,然後它會顯示一條消息,如加載請等待,然後像拉動數據和在中繼器中顯示的所有處理髮生。在asp.net頁面生命週期中是否有類似的事件?在頁面加載後需要中繼器數據綁定

+0

你應該重新考慮改變你的計劃。中繼器是一個僅用於服務器端的asp控制器。您希望顯示沒有數據的頁面,並使用不存在且不是已知元素的中繼器在客戶端加載數據。 –

回答

1

在ASP.NET生命週期中沒有類似事件,儘管您可以使用.NET控件(更新面板,定時器等)來設計一些東西,但更合理的解決方案可能是簡單地使用AJAX和WebMethods (of which here is an example)

然後,您通常也可以忽略服務器端中繼器的外殼元素,並僅填充純本機客戶端HTML元素。

2

我建議你改變你的策略。而不是將ASP服務器控件及其事件與AJAX混合使用,而是使用經典的AJAX(jQuery)+ html/css。

你的中繼器是一個簡單的div

<div id="DataWrapper"> 
    <div id="loadingLabel" style="display:none;">Loading...</div> 
    <div id="DataContainer"> 
    </div> 
</div> 

然後,您可以使用任何頁面的Web方法或ASMX web服務(或支持AJAX的WCF服務,我個人比較喜歡):

public static IEnumerable GetMyData(int KeyID) 
    { 
      DataTable sourceData = GetRepeaterData(KeyID); 

      return sourceData.AsEnumerable().Select(row => 
      { 
       return new 
       { 
        id = row["ID"].ToString(), 
        someName = row["UserName"].ToString(), 
        someSurname = row["userSurname"].ToString() 
       }; 
      }); 
     } 

在JavaScript中有一個函數可以調用這個服務: //但是在那個調用之前,顯示加載..標籤

$('#loadingLabel').show(); 
$.ajax({ 
       type: 'POST', 
       url: '/' + 'GetMyData', 
       data: {'KeyID':'8'}, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       timeout: 30000, 
       success: onSuccess, 
       error: onError 
      }); 
0通過結果在JavaScript

..和循環:

function onSuccess(result) 
    { 
    var src = result.d; 

     for (var post in src) { 
     /* 
     here you can create an JavaScript element and assign a CSS class to it 
     */ 
     $("#DataContainer").append('<div class="myClass">'+ src[post].someName+'</div>'); 
    } 
    // when loading is finished hide the loading.. label 
    $('#loadingLabel').hide(); 
    } 

..和CSS:

.myClass 
{ 
    border: 1px single #000000; 
    padding: 5px; 
} 

這當然只是極短的答案,但我希望它給你一些大致的瞭解。這是非常輕量級的解決方案,你會發現它比混合ASP中繼器和更新面板等更有效。

要獲得關於性能的一些實數,請安裝Fiddler並進行比較。

此外,檢查出這篇文章,這是非常有用的,包含了一些非常有用的建議: http://encosia.com/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/

+0

獲取錯誤使用泛型類型'System.Collections.Generic.IEnumerable '需要1個類型參數以使用IEnumerable –

相關問題