2009-08-07 6 views
0

Dies ist eher eine offene Frage. Was ist Ihre Meinung zu Abfragezeichenfolgen in einer URL? Während Sie Websites in ASP.NET MVC erstellen, verbringen Sie viel Zeit damit, über saubere URLs nachzudenken und sie nur dann zu erstellen, wenn sie bei der ersten Verwendung von Abfragezeichenfolgen, insbesondere in einem Suchformular, zerschlagen werden sollen.Aufräumen von Abfragezeichenfolgen

Zum Beispiel habe ich vor kurzem eine ziemlich einfache Suche Formular mit einem halben Dutzend Textfeld und zwei oder drei Listen von Kontrollkästchen und wählt. Dies ergab die Abfrage-String unten bei der Übermittlung

countrylcid=2057&State=England&StateId=46&Where=&DateFrom=&DateTo=&Tags=&Keywords=&Types 
=1&Types=0&Types=2&Types=3&Types=4&Types=5&Costs=0.0-9.99&Costs=10.00-29.99&Costs=30.00-59.99&Costs=60.00-10000.00 

Schön, ich denke, Sie werden mir zustimmen. Die Hälfte der Felder enthielt keine Informationen und die Listeneingaben sind tatsächlich sehr ausführlich.

Vor einiger Zeit implementiert ich eine einfache Lösung für dieses Problem für das Paging, die eine URL produziert, wie

www.yourdomain.com/browse/filter-on/page-1/perpage-50/ 

dies ein catchall Route verwendet zu greifen, was im wesentlichen nach dem Filter-on Teil eine Ersatzabfragezeichenfolge ist. Funktioniert recht gut, bricht jedoch bei Formulareinreichungen zusammen.

Ich möchte gerne wissen, welche anderen Lösungen die Leute gefunden haben? Es gibt viele Artikel über saubere URLs, aber richten sich an asp.net Entwickler, die grundlegende erholsame URLs erstellen, die MVC abgedeckt hat. Ich überlege mir, ob ich in die Modellbindung eintauchen könnte, um eine angemessene Lösung in dieser Richtung zu finden. Mit der obigen Konvention könnte die große Abfragezeichenfolge wie folgt umgeschrieben werden:

filter-on/countrylcid-2057/state-England/stateId-46/types-{1,0,2,3,4,5}/costs-{0.0-9.99,10.00-29.99,30.00-59.99,60.00-10000.00}/ 

Ist das die Mühe wert?

Danke,

+1

„ein ziemlich einfaches Suchformular mit einem halben Dutzend Textfeld und zwei oder drei Listen von Kontrollkästchen und wählt.“ Das Suchformular von Google ist "ziemlich einfach". Dieser ist kompliziert. Es ist in Ordnung, wenn es unter den gegebenen Umständen einen komplizierten URI erzeugt. –

Antwort

2

Meine persönliche Ansicht ist, dass Benutzer, die wahrscheinlich URLs mit Lesezeichen versehen oder URLs an andere weiterleiten möchten, eine nette, saubere "freundliche" URL verwenden sollten. Ästhetisch sind sie viel schöner. Für eine einfache Paginierung und Bestellung ist eine neu geschriebene URL eine gute Idee.

Jedoch für Seiten, die eine große Nummer von temporären, dynamischen Feldern (wie eine Suche) haben, dann denke ich, die bescheidene Abfrage Zeichenfolge ist in Ordnung. Wie klug für Seiten, deren Inhalt sich wahrscheinlich ändern wird deutlich gegeben die gleiche URL in der Zukunft. In diesen Fällen sind URLs mit Abfragezeichenfolgen in Ordnung und möglicherweise sogar vorzuziehen, da sie dem aufmerksamen Benutzer zumindest anzeigen, dass die Seite dynamisch ist. In diesen Fällen kann es jedoch besser sein, POST-Formularvariablen zu verwenden, da die Besucher auf diese Weise nicht versucht sind, mit den Werten zu "spielen".

0

Sind nicht die Werte der verschiedenen Felder in der FormsCollection ohnehin auf Post?

+1

Ja, das ist einfach so, wie sie in der Adressleiste erscheinen. Auch für die Suche ist es besser, GET für das Suchformular zu verwenden, damit sie mit einem Lesezeichen versehen werden können. – madcapnmckay

+0

Guter Punkt. Ich nehme an, Sie könnten die Querystrings zu einer Art Struktur zusammenstellen, die Sie leichter referenzieren könnten? - –

2

Zusätzlich zu dem, was andere gesagt haben, impliziert eine URL eine Hierarchie, die semantisch ist. Ob heute wahr oder nicht, die Herkunft sind Verzeichnisse und die Leute denken immer noch daran. Deshalb haben Sie Controller/Aktion/ID. Ebenso bedeutet für mich eine Querystring Optionen oder Abfragen.

Ich persönlich denke, eine umgeschriebene URL ist am besten, wenn Sie nicht erkennen können, ob es einen Interpreter dahinter gibt - vielleicht ist es nur eine generierte HTML-Datei?

So wie Sie es tun (und es ist ein Schmerz auf dem Client in einem Suchformular - ich würde mehr Ärger als es Wert ist sagen), würde ich Sie dabei für Hierarchien unterstützen.

z./ Suche/Land/Bundesland/Stadt

aber sobald man anfängt, in Preise und Typen zu gelangen, oder sonst ein "Verzeichnis" mit dem Werttyp vorstellen muss (zB /prices=50.00/ oder schlechter, mit einem Array) Dann hast du mich verloren.

In der Tat, wenn alle Elemente ausgefüllt sind, dann ist alles, was Sie wirklich getan haben, die Querystring genommen, ersetzt "&" durch "/", und kombiniert Ihre Arrays in ein einziges Feld.

Wenn Sie vorhaben, das Javascript sowieso zu schreiben, warum gehst du nicht nur eine Schleife durch die Formelemente und:

  1. die leere entfernen, die Abfragezeichenfolgeflag aus der "& Reinigung price_low = & price_high = & "Arten von Dingen.
  2. Kombinieren Sie mehrere Werte in einer Arraystruktur

Aber dann als Abfragezeichenfolgeflag einreichen.

James