2010-12-31 13 views
2

Ich habe eine Aktion Methode Suche, die aufgerufen wird, wenn ein Formular gebucht wird. Es könnte Tausende von Suchresultaten geben, basierend auf den veröffentlichten Werten der Form. Ich möchte die Suchansicht Seite für Seite anzeigen, aber woher weiß ich, welche Formularwerte zum ersten Mal gepostet wurden? damit ich die Suchansicht aufrufen kann, indem ich Seitenparameter übergebe.Asp.net mvc Form Post und Paging

+2

Ihre Suchaktionsmethoden können Parameter sowohl für die Suchphrase als auch für das Paging verwenden, wie 'Search (string phrase, int page)'. – bzlm

Antwort

0

In meiner app alle Action-Methoden, die Daten an Gitter nehmen als Parameter eine Instanz dieser Klasse bieten:

public class QuerySettings 
    { 
     private int page; 

     public QuerySettings() 
      : this(true) 
     { 
     } 

     public QuerySettings(bool pagingEnabled) 
     { 
      this.Page = 1; 
      this.Rows = 10; 
      this.PagingEnabled = pagingEnabled; 
     } 

     public int Rows { get; set; } 
     public string SortColumn { get; set; } 
     public string SortOrder { get; set; } 
     public string Search { get; set; } 
     public bool PagingEnabled { get; set; } 

     public int Page 
     { 
      get { return page; } 
      set { page = Math.Max(1, value); } 
     } 
    } 

Diese Aufgabe wird durch Business Layer zu Service-Methoden übergeben, die die Informationen verwenden können, übergeben geeignete Sortierung/Filterung anwenden. Sie geben dann die eingepackten Daten zurück:

public class QueryResult<T> 
{ 
     public QueryResult() 
     { 
     } 

     public QueryResult(QuerySettings settings, IList<T> items, int currentPage, int totalPages, int totalItems) 
     { 
      Settings = settings; 
      Items = items; 
      CurrentPage = currentPage; 
      TotalPages = totalPages; 
      TotalItems = totalItems; 
     } 

     public QuerySettings Settings { get; private set; } 
     public int CurrentPage { get; private set; } 
     public int TotalPages { get; private set; } 
     public int TotalItems { get; private set; } 
     public IList<T> Items { get; private set; } 

     public IEnumerable<T> AsEnumerable() 
     { 
      return this.Items; 
     } 
    } 
2

Der beste Ansatz wäre, die Staatenlosigkeit des Systems zu akzeptieren. Geben Sie bei jeder Wiedergabe der Ansicht die Werte ein, die Sie für die nächste Aktionsanforderung benötigen. Sie könnten der Abfragezeichenfolge auf der Aktionsverknüpfung hinzugefügt werden, als Formularelemente hinzugefügt werden und die Verknüpfung ruft einen POST auf (letzteres klingt am besten, da der Suchbegriff wahrscheinlich ein Formulareingabeelement an und für sich ist).

Füllen Sie einfach die Texteingabe für den Suchbegriff (ich gehe davon aus, dass Sie das verwenden) mit dem angegebenen Suchwert jedes Mal, wenn Sie die Ansicht rendern. Die Seitennummer kann an die Abfragezeichenfolge der Paging-Links angehängt werden. Usw.

So ist jede nachfolgende Anfrage vollständig realisiert und unabhängig von vorherigen Anfragen. Der Suchbegriff, die Seitenzahl, eventuell die Seitengröße usw. sollten jeweils an die Aktion übergeben werden.