Frage

Wir schreiben eine Suchanwendung, die die Suchkriterien zu Sitzungsstatus speichert und führt die Suche innerhalb eines asp.net Update. Manchmal, wenn wir mehrere Suchvorgänge nacheinander die 2. oder 3. Suche ausgeführt wird manchmal zurückgehen aus dem ersten Satz von Suchkriterien.

Beispiel: unsere erste Such wir einen Blick nach oben auf „John Smith“ - sind> John Smith Ergebnisse angezeigt. Die zweite Suche wir einen Blick tun oben auf „Bob Jones“ -> John Smith Ergebnisse werden angezeigt.

Wir speichern alle der Suchkriterien in dem Sitzungszustand, wie ich sagte, und es von Sitzungsstatus innerhalb des Ajax-Request lesen Sie die DB-Abfrage zu formatieren. Wenn wir Bruchstellen in VS setzen verhält sich alles wie normal, aber ohne sie uns die ursprünglichen Suchkriterien und Ergebnisse zu erzielen.

Meine Vermutung ist, weil sie in der Sitzung gespeichert werden, dass der Ajax-Request irgendwie seine eigene Sitzung erhält und speichert die Kriterien, dass, und ruft dann die Kriterien aus dieser Sitzung jedes Mal, aber das Nicht-Asynchron-Material ist in der Lage zu sehen, wenn die Kriterien geändert und speichern die Änderungen in dem Zustand entsprechend, sondern weil sie aus zwei verschiedenen Sitzungen gibt es eine Ungleichheit in dem, was gespeichert und gelesen wird.

EDIT ::: Auszuarbeiten mehr gibt es einen Vorschlag, die Suchkriterien an den Query-String von Anhängen, die normalerweise gute Praxis ist, und ich stimme das ist, wie es sein soll, aber nach unseren Anforderungen Ich sehe es nicht als lebensfähig zu sein. Sie wollen es so dass der Benutzer aus füllt die Eingabe steuert Treffer suchen und es gibt keine Seite neu geladen, das einzige, was sie sehen, ist eine Fortschrittsanzeige auf der Seite, und sie haben immer noch die Möglichkeit, navigieren und andere Funktionen auf der aktuellen Seite zu verwenden. Wenn ich an die Query-String hinzuzufügen Kriterien wäre, würde ich auf eine weitere Anforderung tun die ganze Seite verursacht, zu laden, die auf den Suchkriterien je eine wirklich lange Zeit in Anspruch nehmen kann. Aus diesem Grund wir einen Ajax-Aufruf verwenden, um die Suche auszuführen und warum wir verursachen nicht eine andere ganze Seite Anfrage ..... Ich hoffe, dass dies die Situation verdeutlicht.

War es hilfreich?

Lösung

Es gibt nicht mehrere Sitzungen zwischen normalen ASP.NET Seite geladen wird, Postbacks und ASP.NET AJAX Teilpostbacks. Ich kann Ihnen sagen, dass mit Sicherheit.

Anstatt die Suchzeichenfolge in der Sitzung zu speichern, wie etwa nur mit dem Inhalt der TextBox Suche direkt? Ich kann nicht aus irgendeinem Grund denken, warum Sie benötigen, würde es um mischen, da es ohnehin während des gesamten Lebenszyklus Seite zur Verfügung stehen wird.

Schließlich über Ihre Anforderungen ... Mit einem Update tut nicht , um die Anforderung zu erfüllen, die Ihre Nutzer sollten andere Funktionen auf der Seite verwenden können, wenn diese Funktionalität auch partielle Postbacks erhöht. Nur ein Teil-Postbacks kann zu einem Zeitpunkt im Gang sein. Wenn ein anderes Ereignis ausgelöst wird, während die Suche läuft, wird die Suchanfrage ohne Benachrichtigung gelöscht werden.

eine Seite Methode oder Web-Service für die Suche verwenden wäre eine viel schneller, einfacher und robuste Art und Weise tun. Ich normalerweise nicht meine eigene Seite stecken, aber ich denke, ein paar meiner Beiträge genau relevant sind, was Sie tun:

Sie können eine Benutzersteuerung verwenden, um die Suchergebnisse über einen Web-Service (sehr viel schneller als ein Update) zu machen: http://encosia.com/2008/02/05/boost-aspnet-performance-with-deferred-content-loading/

Oder Sie die Suchergebnisse als JSON zurückkehren könnten und machen, dass auf der Client-Seite (noch schneller): http://encosia.com/2008/06/26/use-jquery-and-aspnet-ajax-to- Build-a-client-side-Repeater /

So oder jene Methoden, um Ihre Suchfunktionalität aus dem partiellen Postbacks Paradigma nehmen konnte, so dass es schneller läuft, verbraucht weniger Bandbreite und Server-Ressource, und schließt nicht andere Update Aktivität von gleichzeitig auftreten.

Andere Tipps

Nur einen anderen Gedanken, ich habe laufen immer Probleme mit Update und ziehe meine Atlas AJAX-Anfragen durch die Bibliothek direkt zu schreiben, mit Pagemethods. Sie haben mehr Kontrolle darüber, was Sie senden und empfangen. Update die gesamte Seite sendet und empfängt die gesamte Steuerung Hierarchie Seite, dann parst sie heraus, was ‚frisch‘ ist, und zeigt, dass.

Edit: Was ist der Code, den Sie anhand der Kriterien, um die Sitzung speichern? Und tun Sie Code in der Methode, die tatsächlich überprüft, ob die Sitzung einige Kriterien gespeichert hat, und geht das zurück statt? Vielleicht ist das, warum die 2. / 3. Updatepostbacks den ersten Satz von Kriterien anstelle der erwarteten Ergebnisse der Rückkehr? Als beiseite, ich kenne einige schwere Atlas Ajax Dinge zu tun, dass es auf keinen Fall zwei Sitzungen (eine für normale Postbacks, eine für async) ist Gibt es eine Chance, dass Sie eine Webfarm verwenden?

Edit # 2: Ich würde nicht schreiben der Lage gewesen, was ich oben (erste Ziffer) geschrieben, wenn ich ein Fan von jemandem nicht gewesen war, der auch antwortete: https://stackoverflow.com/users/60/dave-ward

Sie müssen die EnableSession Eigenschaft des WebMethod-Attribut für die Funktion festlegen, die Sie anrufen.

[WebMethod( EnableSession=true )]
public static void DoSomething(){
    /// ....
}

Wenn Sie .ashx generische Handler verwenden, leiten nur aus IRequiresSessionState Schnittstelle

public class ActionRequest : IHttpHandler, IRequiresSessionState
{
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top