2014-02-05 4 views
0

Я использую метод SelectMethod ретранслятора asp.net для возврата моих объектов. Можно ли получить количество возвращаемых предметов?Repeater 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> 

EDIT: В соответствии с просьбой: мой метод 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

«Элементы» - это список менеджеров сценариев. Я не знаю, почему ... – 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/en-us/library/system.web.ui.webcontrols.repeateritem.itemtype(v=vs.110).aspx –

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