2017-01-09 1 views
1

Ich habe ein Viewmodell wie unten beschrieben in eine Steuerung zu übergeben.MVC ViewModel und seitenweise Ergebnisse

[HttpPost] 
public JsonResult GetSearchResultsJson(SearchCriteria searchCriteria) 
{ 
} 

such ist definiert als:

public class SearchCriteria 
{ 
    public SearchData searchData { get; set; } 
    public SearchMode searchMode { get; set; } 
} 

Wo ist Searchmode:

public class Searchmode 
{ 
    public int? mode { get; set; } 
    public int? pageNumber { get; set; } 
    public int? pageSize { get; set; } 
} 

und hat 61 search Eigenschaften, die definieren, welche Elemente zu suchen sind.

public class SearchData 
{ 
    public string name {get;set;} 
    .... 
    public int age {get;set;} 
} 

Ich befüllen ein Objekt mit jQuery und übergeben das an den Controller. .NET konvertiert dieses Objekt in ein Objekt vom Typ SearchCriteria. Alles funktioniert, aber wenn das PagedListPager-Steuerelement gerendert wird, wie emuliert ich die jQuery, die zum Erstellen des Objekts verwendet wird?

Im Moment habe ich den folgenden Code haben:

@Html.PagedListPager(Model.DocumentsPaged, pageNumber => Url.Action("GetSearchResultsJson", XXXXXXXXXXXXXXXXXXXXXXX),pLRO) 

Und wissen nicht, was in dem Bit als XXXXXXXXXXXXXXXXXXXXXXX markiert zu setzen.

Innerhalb von jQuery kann ich die pageNumber -Eigenschaft des SerachMode-Objekts ändern, und dies liefert mir die richtige Seite, aber genau diese Eigenschaft muss ich innerhalb des Html.PagedListPager-Helpers aktualisieren.

+0

Sie müssen generieren route (query string) Wert für jede Eigenschaft - 'Url.Action (" GetSearchResultsJson ", neu {searchData.name = xxx, searchData.age = xxx, ....})'. Beachten Sie, wenn Sie alle diese Eigenschaften in einer Klasse kombiniert haben, dann kann es nur 'Url.Action (" GetSearchResultsJson ", Model.Criteria) sein, vorausgesetzt das Modell enthält eine Eigenschaft' SearchCriteria Criteria'. Aber wenn Sie wirklich 61 Eigenschaften haben (plus die 3 in 'searchMode'), dann ist es sehr wahrscheinlich, dass Sie die Abfragezeichenfolgegrenze überschreiten und eine Ausnahme auslösen. –

Antwort

2

Wie in Beispiel here beschrieben, können Sie die Seite übergeben.

Ich empfehle Ihnen wirklich, den Beispielcode zu klonen und ein wenig damit zu spielen. Wahrscheinlich müssen Sie auch Ihre Suchparameter hinzufügen, falls Sie sie serverseitig verlieren.

+0

Vielen Dank, ich werde das jetzt untersuchen. – gilesrpa

+0

Noch fest, würde mehr Zeiger dankbar erhalten werden. – gilesrpa

+0

Übrigens, Sie müssen Ihre SearchCriteria um den Seitenzahlenparameter erweitern. – BinaryFr3ak

0

Ihre Methode GetSearchResultsJson(SearchCriteria searchCriteria) ist mit [HttpPost] gekennzeichnet. Sie können also die URL-Parameter leer lassen und einfach Url.Action("GetSearchResultsJson") verwenden. Die Suchparameter für einen POST werden anstelle der URL in den Hauptteil der Anfrage eingefügt.

Da die Html.PagedListPager Methode eine ‚Seite‘ Parameter erwartet (vorausgesetzt, Sie die Methode aus dem PagedList.Mvc NuGet Paket verwenden), sollten Sie Ihre Suchfunktion wie folgt schreiben:

GetSearchResultsJson(int page, int SearchCriteria searchCriteria)