2014-02-05 76 views
0

我正在使用一個asp.net轉發器的SelectMethod來返回我的對象​​。是否有可能獲得返回的物品數量?中繼器SelectMethod - 如何獲取返回的項目數量?

我最初使用的是<%#: Items.Count %>,但很快就意識到沒有返回正確數量的返回對象。

<asp:Repeater ID="docResults" runat="server" 
    ItemType="ArchiveViewer.Models.Document" 
    SelectMethod="GetSearchResults" > 
    <HeaderTemplate> 
     <p class="result-info"> 
      Found <strong> <%#: Items.Count %> </strong> results. 
     </p> 
    </HeaderTemplate> 
    <ItemTemplate>         
     <div> 
      Title: <%#:Item.Metadata.Title %> 
     </div> 
     <div> 
      Author: <%#:Item.Metadata.Author %> 
     </div> 
    </ItemTemplate> 
    </asp:Repeater> 

編輯:根據要求:我GetSearchResults方法...

[WebMethod] 
public IEnumerable<Document> GetSearchResults(
      [QueryString("query")] string query, 
      [QueryString("type")] string queryType) 
    { 
     IEnumerable<Document> results = null; 
     try 
     {  
      ArchiveSearcher searcher = new ArchiveSearcher(); 
      results = searcher.SearchMetadata(query, queryType, 1, 20); 

      if (results.Count() > 0) 
      { 
       // Display the first search result in the viewer 
       Document firstResult = results.FirstOrDefault(); 
       hfCurrentDocId.Value = firstResult.DocumentId.ToString(); 
       hfImageDir.Value = firstResult.FolderPath; 
       hfObjectData.Value = firstResult.JSONPath; 
      } 
     } 
     catch (Exception ex) 
     { 
      // Log the exception. 
      ArchiveViewer.Logic.ExceptionUtility.LogException(ex, 
       "GetSearchResults in Search.aspx.cs"); 
     }   
     return results; 
    } 

謝謝!

+0

你在爲什麼獲得'<%#:Items.Count%>'? –

+0

'Items'是腳本管理器列表。我不知道爲什麼... – Tums

+0

告訴我們'GetSearchResults' –

回答

0

如果更換標籤和ID的計數控制:

<HeaderTemplate> 
    <asp:Label ID="TotalCount" runat="server" /> 

後數據綁定,你可以得到的中繼器項目總數,抓住從控制TOTALCOUNT標籤。有些人喜歡使用的方法:

Repeater1.Controls(0).FindControl("TotalCount") 

要解開它,和數據綁定後設置。請記住,Repeater Items集合中包含標題,因此您只需要計數中繼器項目。爲了搶項目的數量,這樣做:

Repeater1.Items.Where(i => i.ItemType == ListItemType.Item) 

你必須包括要計算的項目類型,提到here

+0

所以,當我做'Items.Count'時,我得到標題?我如何獲得中繼器項目? – Tums

+0

你必須省略標題,所以使用LINQ我認爲你可以做'Repeater.Items.Where(i => i.ItemType == ListItemType.DataItem)'這只是項目模板中的項目。如果您使用備用模板,那麼有一個單獨的項目類型。請參閱:http://msdn.microsoft.com/zh-CN/library/system.web.ui.webcontrols.repeateritem.itemtype(v=vs.110).aspx –

相關問題