In meiner Basisseite muss ich ein Element aus der Abfragezeichenfolge entfernen und umleiten. Ich kann
nicht verwenden
, da die Sammlung schreibgeschützt ist. Gibt es eine Möglichkeit, die Abfragezeichenfolge abzurufen (außer für dieses eine Element), ohne die Auflistung zu durchlaufen und neu zu erstellen?
Sie müssten die URL rekonstruieren und dann umleiten. Etwas wie das:
%Vor%Jedenfalls habe ich das nicht getestet, aber es sollte funktionieren (oder wenigstens in die richtige Richtung).
Sie können vermeiden, den ursprünglichen Abfrage-String zu berühren, indem Sie stattdessen eine Kopie davon bearbeiten. Sie können dann die Seite wie folgt auf die URL umleiten, die Ihre geänderte Abfrage enthält:
%Vor%Aktualisierung:
Es stellt sich heraus, dass wir den Code wie folgt vereinfachen können:
%Vor%Ich hack schnell, erspare dir wenig. Aber foo wird nicht für den Code vorhanden sein, der darauf in nextpge.aspx wartet:)
Interessante Frage. Ich sehe keine wirklich praktikable Alternative zum manuellen Kopieren der Sammlung, da KopieTo nur Ihnen erlaubt, die Werte (und nicht die Schlüssel) zu erhalten.
Ich denke HollyStyles 'Hack würde funktionieren (obwohl ich nervös wäre, wenn ich einen Replace in einen QueryString einfügen würde - obv. abhängig vom Anwendungsfall), aber da ist eine Sache, die mich stört ..
Warum wird die Zielseite nicht vom QueryString entfernt?
Es wird einfach ignoriert?
Wenn das nicht gelingt, müssen Sie nur in den sauren Apfel beißen und eine util-Methode erstellen, um die Sammlung für Sie zu ändern.
Ahhhh! Ich sehe jetzt, ja, ich hatte ähnliche Probleme mit SiteMap, die einen vollständigen Vergleich der Zeichenfolge durchführen.
Da es nicht möglich ist, den anderen Quellcode (d. h. die Suche) zu ändern, würde ich wahrscheinlich sagen, dass es am besten ist, die Zeichenfolge zu ersetzen. Auch wenn Sie häufig einen ähnlichen Code finden, wäre es ebenso einfach, eine Dienstprogrammfunktion zum Klonen der Sammlung einzurichten, indem Sie ein Array von Werten verwenden, um daraus zu filtern.
Auf diese Weise müssten Sie sich nie wieder um solche Probleme kümmern:)
HttpUtility.ParseQueryString(Request.Url.Query)
return ist QueryStringValueCollection
. Es erbt von NameValueCollection
.
Die Suchseite hängt "& amp; terms=" an die Abfragezeichenfolge zum Hervorheben an, also es vermasselt es.
Nur eine andere Option ist eine Regex-Ersetzung. Wenn Sie sicher wissen, dass & amp; Begriffe sich in der Mitte der Sammlung befinden, lassen Sie den Trailing & amp; in der Regex, wenn Sie sicher wissen, dass es am Ende ist, dann lassen Sie die schleppende & amp; und ändern Sie die Ersatzzeichenfolge "& amp;" zu String.Empty
%Vor% Hier ist eine Lösung, die LINQ gegen Request.QueryString
verwendet, was bei Bedarf eine komplexe Filterung von qs-Parametern ermöglicht.
Das folgende Beispiel zeigt, wie ich den Parameter uid
ausfiltern kann, um eine relative URL für die Umleitung zu erstellen.
Vorher: http://www.domain.com/home.aspx?color=red&uid=1&name=bob
Nach: ~/home.aspx?color=red&name=bob
Entfernen Sie den QS-Parameter von der URL
%Vor%Können Sie die Sammlung klonen und dann auf die Seite mit der geklonten (und geänderten) Sammlung umleiten?
Ich weiß, es ist nicht viel besser als das Iterieren ...