2009-07-22 12 views
1

Ich habe folgendes Szenario:C# ASP.NET MVC: Dynamische Abfragezeichen für Search

1) Ein Telefonbuchtabelle

2) Mehrere Möglichkeiten der Suche durch die Tabelle (Vorname, Nachname)

3) Es besteht auch die obligatorische Paging (Seitengröße und die Seitenzahl) sowie die Sortierung

Wenn der Benutzer die Seite zuerst auf die URL einfach ist /Telefonbuch. Nehmen wir an, der Benutzer sucht nach "abc", dann wird die URL /Telefonbuch? Q = abc. Dann sortiert er aufsteigend nach dem Vornamen und die URL sollte /Telefonbuch? Q = abc & sort = Vorname & bestellen = asc.

Das Problem, das ich habe, ist, wie programmiere ich meine Ansicht automatisch anhängen/ändern die Abfrage Zeichenfolge, so dass es noch eingegebene Einschränkungen (wie in meinem "abc") Abfrage enthält aber neue Einschränkungen zum Beispiel beim Sortieren angepasst/hinzugefügt und dann wird Paging usw. verwendet?

Ich würde es hassen, JS zu verwenden und den Speicherort für diese neu zu schreiben, und eher die Seite generieren echte Anker (eine href) nach jedem Postback für jede Sortierung/Seite/Filter-Link auf meiner Seite.

Schätzen Sie Ihre Zeit Leute :)

+0

aktualisiert mit einigen Beispielen für Sie –

Antwort

1

Ich nehme an, Sie haben eine Art von Steuerelementen auf der Seite, um festzulegen, was sortiert wird, in welcher Reihenfolge und offensichtlich eine Möglichkeit zu definieren, was gefiltert wird?

Wenn Sie die Seite laden, legen Sie diese Werte in der Ansicht fest und der Controller sollte dann beim nächsten Laden korrekt aktualisiert werden. Auf diese Weise ist es für den Benutzer einfach, sie auch zu ändern, ohne die URL zu berühren. In diesem Fall ist es vorbei geradeaus die Daten aus der Steuerung zur Ansicht und Einstellung der Werte, wie Sie würden jede andere Steuerung, zum Beispiel:

<input type="text" name="search" value="<%= (string)ViewData["Search"] %>" /> 

Wenn Sie es wirklich in der URL benötigen, ändern Sie die Schaltfläche, indem Sie die zusätzlichen Parameter anonymen Typ übergeben.

Für einen Link etwas wie folgt aus:

<%= Url.Action("Search", "PhoneBook", new {order="asc"}) %> 

für ein Formular (da Sie nicht speziell ein Submit-Button gesetzt haben) so etwas wie dieses

<% using (Html.BeginForm(new {order="asc"}) { 

Sie könnten diejenigen, die aus der Steuerung ziehen B.

<% using (Html.BeginForm(new { sort=(string)ViewData["Sort Order"] })) 
+0

Könnten Sie einen Beispiel hinzufügen le bitte? Vielen Dank :) – Alex

1

nur zusätzliche Parameter in einem anonymen Objekt übergeben:

<%= Html.ActionLink("Sort ascending", "Search", "PhoneBook", new {order="asc"}) %> 
<!-- or --> 
<%= Url.Action("Search", "PhoneBook", new {order="asc"}) %> 

Wenn die zusätzlichen Parameter nicht in der Route definiert sind, werden sie als Query-Strings hinzugefügt werden.