2016-04-01 3 views
0

Hallo Kollegen Programmierer,Wie übergebe ich einen Querystring mit Leerzeichen oder Punkten an einen Controller?

Ich habe Probleme mit meiner MVC-Anwendung. Ich habe eine Querystring, die ich an meinen Controller übergeben möchte, nennen wir es "Happy Days", aber wenn die Zeichenfolge aus meiner Sicht übergeben wird, wird es nur "Happy" übergeben und stoppen, weil es ein Leerzeichen gibt. Auf die gleiche Weise, wenn die Zeichenfolge "Happy.Days" wäre, würde sie nur "Happy" passieren und zu dieser Zeit anhalten.

Meine Fragen ist, wie übergebe ich die vollständige Zeichenfolge und den Raum oder die Perioden?

Die Zeichenfolge wird von einer Client-Vorlage innerhalb eines Kendo-Rasters übergeben, hier ist der Code, den ich in meiner Client-Vorlage für die Handhabung habe. Selbst wenn dies auf eine andere Weise gemacht würde, wäre der Platz immer noch ein Problem, aber dies ist so, dass Sie mein Szenario sehen können.

"<a data-identity='#=owner_company#' data-toggle='modal' data-target='\\#owner_details' href='" + Url.Action("OwnerModal", "Home") + "/" + Server.UrlEncode("#=owner_company#") + "'>#=owner_company#</a>"); 

Sie werden sehen, dass ich versucht habe URLEncode zu verwenden, aber dies hat nicht geholfen.

Die URL, die in der Ansicht contructed wird, ist wie folgt:

<a href="/Project/Home/Owner/Happy Days" data-target="#owner_details" data-toggle="modal" data-identity="modal">Happy Days</a> 

Wie Sie es hat die Zeichenfolge mit dem Raum in es wie erwartet zu sehen.

Gibt es trotzdem, ich kann das beheben oder es in meiner Ansicht für die Weitergabe an den Controller korrekt codieren.

Dank

+0

"Sie werden sehen, dass ich versucht habe, URLEncode zu verwenden, aber das hat nicht geholfen." "Ja wirklich?" Was kotzt das andere Ende aus? – Will

+0

Ok, wenn ich "Happy Days" mit URLEncode passiere, bekommt der Controller nur noch "Happy". – Yanayaya

+0

Aber was wird in der Benutzeroberfläche verloren? Sie sollten in der Lage sein, das Anchor-Tag zu überprüfen und zu sehen, wie die URL ist. – Will

Antwort

0

Es scheint, dass Server.UrlEncode saugt. Es codiert nicht den Platz, der Ihre Kopfschmerzen Serverseite verursacht. Einige vorläufige Forschungsergebnisse deuten darauf hin, dass es sich um eine Rückwärtskompatibilität handelt, weshalb es möglicherweise so schwer fällt.

Stattdessen sollten Sie Uri.EscapeUriString() verwenden.

<a href='" + 
    Url.Action("OwnerModal", "Home") + 
    "/" + 
    Uri.EscapeUriString("#=owner_company#") + 
    "'>#=owner_company#</a> 

+0

Ich fand etwas Interessantes über das Wochenende diesbezüglich. Ich habe "data-toggle" und "data-target" in meine URL eingefügt, was für das Bootstrap 3 Modal Popup ist. Wenn ich diese Elemente aus der URL entferne und die Zeichenfolge korrekt übergeben wird. Ich habe es noch weiter eingegrenzt und es ist dieser Punkt "data-toggle = 'modal'", der die korrekte Übergabe der Zeichenkette stoppt. Entferne das und es funktioniert, nicht das Beste, wenn man bedenkt, dass ich das Modal brauche. – Yanayaya

1

Versuchen Sie, Ihren Code zu diesem Wechsel (Uri.EscapeUriString("#=owner_company#") scheint mir seltsam, aber wenn es funktioniert, klopfen sich heraus Wenn nicht, ... es beheben.?):

"<a data-identity='#=owner_company#' data-toggle='modal' data-target='\\#owner_details' href='" + Url.Action("OwnerModal", "Home") + "/#= encodeURIComponent(owner_company) #"'>#=owner_company#</a>"); 

Auf diese Weise codieren Sie den URI-Parameter mit #= encodeURIComponent(owner_company) # clientseitig mit Javascript, was die richtige Vorgehensweise ist, da Kendo UI ein Client-seitiges Vorlagensystem verwendet.

+0

Du hast meinen Tag Mann gerettet ...! –

Verwandte Themen