ASP.Net MVC Aktionsparameter zwischen Postbacks halten

8

Angenommen, ich habe eine Seite mit Suchergebnissen. Ich suche nach stackoverflow und es gibt 5000 Ergebnisse, 10 pro Seite. Jetzt mache ich das beim Erstellen von Links auf dieser Seite:

%Vor%

Ich mag das nicht, ich muss meine Links mit sorgfältiger Überlegung zu dem, was vorher gepostet wurde usw. aufbauen.

Was ich gerne machen würde, ist

%Vor%

Dabei überschreibt das anonyme Wörterbuch alles, was derzeit von einer vorherigen Aktion festgelegt wurde.

Im Wesentlichen interessiert mich, was die vorherigen Aktionsparameter waren, weil ich es wiederverwenden möchte, es klingt einfach, aber fange an, Sortier- und viele fortgeschrittene Suchoptionen hinzuzufügen und es beginnt unordentlich zu werden.

Ich vermisse wahrscheinlich etwas Offensichtliches

    
Robert Harvey 23.09.2008, 16:26
quelle

8 Antworten

12

Ich hatte ein ähnliches Problem in einem HtmlHelper; Ich wollte Links erzeugen, die mit der aktuellen Seite verlinkt sind, mit einer kleinen Anpassung der Parameter (denke daran, die Seitennummer zu erhöhen). Wenn ich also URL / Item /? Sort = Name & amp; page = 0 hätte, wäre ich in der Lage, Links zu derselben Seite zu erstellen, aber nur den Seitenparameter zu ändern, und den Sortierparameter automatisch einzubeziehen (zB / Item /? sort = Name & amp; Seite = 1).

Meine Lösung war dies (für die Verwendung in einer HtmlHelper-Erweiterungsmethode, aber da Sie fast überall in MVC auf dieselben Daten zugreifen können, können Sie sie leicht an Ihre Verwendung anpassen):

%Vor%

Was die Methode macht, ist das RouteValueDictionary für die aktuelle Anfrage zu nehmen und eine Kopie davon zu erstellen. Dann fügt es jeden dieser Abfrageparameter, die in der Abfragezeichenfolge gefunden werden, zu dieser Route hinzu. Es tut dies, weil das RouteValueDictionary der aktuellen Anfrage sie nicht enthält (Sie würden es denken, aber es tut es nicht).

Sie können dann das resultierende Wörterbuch verwenden und nur einen Teil davon ändern, zum Beispiel:

%Vor%

und geben Sie dann dieses Wörterbuch den Out-of-the-Box-HtmlHelper-Methoden, damit diese Ihnen eine URL / etc.

generieren     
Daniel Chambers 04.08.2009 15:12
quelle
1

Wenn Sie in Ihren Ansichten redundanten Code schreiben, schreiben Sie einen Helfer . Der Helfer könnte die Parameter explizit kopieren, wie Sie es gerade tun, oder er könnte die gesamte Sammlung iterieren und automatisch kopieren. Wenn ich es wäre, würde ich wahrscheinlich die erste wählen. Dann können Sie einfach Ihren neuen Helfer anrufen, anstatt die Parameter jedes Mal neu zu erstellen, wenn Sie eine Verbindung herstellen.

    
Craig Stuntz 23.09.2008 17:25
quelle
1

Ich bin ein wenig unsicher, was Sie hier eigentlich machen wollen. Ich denke, Sie versuchen, den Prozess der Erstellung einer Liste von Links mit nur kleinen Änderungen zwischen ihnen zu automatisieren. Anscheinend in deinem Fall die ID-Nummer von "Page".

Ein Weg, es zu tun, obwohl möglicherweise nicht das beste ist so (Mein Code nutzt eine grundlegende und erfundene Produktliste und die ViewPage und PartialViewPage beide stark typisierte Modelle verwenden):

Auf Ihrer ViewPage würden Sie Code wie folgt hinzufügen:

%Vor%

Ihre Teilansicht, in meinem Fall "ProductEntry", würde dann so aussehen:

%Vor%

Alles, was ich in dieser Teilansicht mache, verbraucht die Modell- / Viewdaten, die von der Elternansicht durch den Aufruf von Html.RenderPartial

übergeben wurden

In Ihrer Elternansicht können Sie einen Parameter in Ihrem Modellobjekt vor dem Aufruf von Html.RenderPartial ändern, um den spezifischen Wert festzulegen, an dem Sie interessiert sind.

Hoffe, das hilft.

    
Switters 23.09.2008 19:57
quelle
1

Die folgende Hilfsmethode macht genau das:

%Vor%     
Jalal El-Shaer 17.10.2009 11:59
quelle
0

Sehen Sie sich das an, es ist ein gutes Beispiel: Ссылка

    
Florin Gugui 03.12.2010 13:22
quelle
0

Nach stundenlangem Ausprobieren verschiedener Lösungen funktionierte nur dieser für mich: MVC ActionLink fügt alle (optionalen) Parameter von der aktuellen URL hinzu

    
Ziad 14.06.2011 05:23
quelle
0

Hier ist die Actionlink-Erweiterung

%Vor%     
h3n 03.07.2012 06:51
quelle
0

Nicht unbedingt eine Antwort, aber es lohnt sich, darauf hinzuweisen: Wenn Sie eine Seitenfunktionalität wünschen, verwenden Sie das PagedList Nuget-Paket (Sie müssen das Rad nicht neu erfinden). Der folgende Link bietet ein wirklich schönes Beispiel für die Verwendung: ASP.NET Tutorial

Dies ist besonders nützlich für Sie, da Abfragezeichenfolgen beim Wechseln zwischen den Seiten in der URL gespeichert werden.

    
Mr Jones 16.07.2012 13:20
quelle