2012-04-04 15 views
0

Ich hätte gerne einen Rat zu diesem Thema. Grundsätzlich habe ich 2 Seiten (der Einfachheit halber), und die zweite Seite ist vollständig von der ersten Seite abhängig.Übergeben und Speichern von Objekten zwischen Seiten

kann also sagen, dass die Haupt-Seite ist eine Suche Seite und die zweite Seite ist eine Ansicht Seite.

Die Website arbeitet mit XML-Anfragen, und das ultimative Ziel ist es, die XML-Anfragen auf ein Minimum zu beschränken, da jede Anfrage ein wenig langsam ist. Ich dachte über die Verwendung von Sessions nach, aber ich hatte in der Vergangenheit einige Probleme mit Sessions, die zufällig zwischen Usern gemischt wurden und die ich nur durch eine Änderung des Recycle-Prozesses in IIS in einen sehr kleinen Zeitrahmen bringen konnte auf jede andere Weise. Ich habe versucht TempData, aber das läuft nach einer Anfrage ab, so dass eine Aktualisierung der Seite auf der Ansichtsseite nicht möglich scheint. (oder ist das?)

Wie auch immer, wir haben die Suchseite mit 5 Attributen, die von der Ansichtsseite benötigt werden, aber nur 2 werden benötigt, um die XML-Anfrage auf der Ansichtsseite zu machen.

z.B.

Search Enthält:

  • ID,
  • Name
  • City,
  • E-Mail,
  • Höhe

View Seite benötigt folgende von

  • ID,
  • Name
  • Email

Ansicht Seite zeigt alle Informationen von der Suchseite, plus alles, was in der XML-Antwort: Die Suchseite die XML-Anfrage abzuschließen .

Der Link ich habe auf der Suchseite nur die ID in der URL, so dass Name und E-Mail für die XML-Anfrage auf der zweiten Seite einige wie benötigt werden. Nicht sicher, ob es ohne Sitzungen möglich ist?

, was ich versucht habe, ist:

Speichern Sie die Suchergebnisse in TempData. Auf diese Weise, wenn jemand die ‚Ansicht‘ Link (<a href="/view/123456">View</a>) klickt, lädt die Seite anzeigen die Suchergebnisse wie folgt:

var viewPage = SearchResults.Where(w => w.ID == id).FirstOrDefault(); 

Das Ansichtsmodell dann die Seite rendert durch die Name und Email von viewPage greifen, so dass eine XML Anfrage und Anzeige der Antwort, zusammen mit anderen erforderlichen Details von viewPage.

Es funktioniert wie erwartet mit Tempdata. Daten bleiben nur bei der ersten Anfrage bestehen, sie werden bei einer Seitenaktualisierung gelöscht. Sessions ist die Alternative, aber gibt es noch andere?

(sorry für die Wand des Textes :)

+0

Ich hatte gerade einen kurzen Blick auf Ihre Frage und ich erinnerte mich an ein Projekt, an dem ich gerade so gearbeitet habe. Ich habe das Problem gelöst, indem ich die Werte (E-Mail, Name usw.) mit einem asymmetrischen Verschlüsselungsalgorithmus verschlüsselt und als QueryString-Wert angegeben habe. Denken Sie auch daran, dass 'TempData' auch Sitzungen verwendet. – tugberk

Antwort

0

Warum nicht mehr Standardtechniken wie ein <form> Tag in der Suchseite zeigt auf die Controller-Aktion verwenden, die die Suche durchführen wird:

@using (Html.BeginForm("search", "somecontroller", FormMethod.Get)) 
{ 
    ... some input fields for your search criteria 
    <button type="submit">Search</button> 
} 

und dann werden Sie die Suche Controller-Aktion haben:

public ActionResult Search(SearchModel model) 
{ 
    var results = .... 
    return View(results); 
} 

ich auf dem Formular GET-Methode verwendet haben, die die Ergebnisse p den Benutzer Lesezeichen erlaubt Alter und komme später darauf zurück.

Verwandte Themen