2012-01-03 5 views
63

Voglio inviare le variabili itemId e entityModel al ActionResult CreateNote:Url.Action mette un & nel mio url, come posso risolvere questo?

public ActionResult CreateNote(
     [ModelBinder(typeof(Models.JsonModelBinder))] 
     NoteModel Model, string cmd, long? itemId, string modelEntity) 

con questo javascript:

Model.meta.PostAction = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity}); 

Tuttavia, l'URL dell'essere invio è

localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44  

voglio inviare

localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44 

Come posso impedire a Url.Action di mettere lo & davanti alla seconda variabile che voglio inviare?

+0

Cosa ti fa pensare che '&' non sia OK? – Oded

+1

Perché quando guardo ActionResult con un punto di interruzione, quando ho localhost: 1304/Administration/blue/en-gb/Entity/CreateNote? ModelEntity = Phrase & itemId = 44 modelEntity = Phrase e itemId = null. Quando li giro in javascript e ottengo localhost: 1304/Administration/blue/en-gb/Entity/CreateNote? ItemId = 44 & modelEntity = Phrase itemId = 44 e modelEntity = null. Ecco perché penso che abbia a che fare con lo & –

+4

@Oded - perché i dati vengono inseriti in JavaScript, non in HTML. – Quentin

risposta

94

Non ho notato ieri che avevi il &. Pensavo che fosse stato l'editor SO a cambiarlo. Prova a inserire il numero Url.Action() in un @Html.Raw() per impedire la codifica di &.

Oppure, in alternativa solo Url.Action() il controller/bit di azione e passare i due parametri come dati messaggio piuttosto che direttamente sull'URL, jQuery dovrebbe risolvere i s &' per te in quel modo.

+1

Sì, questo ha funzionato grazie mille –

+26

Questa soluzione funziona, ma perché Url.Action viene codificato? Parla di comportamento inaspettato. – Jerry

+0

ha funzionato, grazie –

11

Penso che il tuo problema sia con Model.meta.PostAction - è una proprietà string?

Se è così allora la mia ipotesi è che si sta aggiungendo alla pagina sia con:

  • Razor: @Model.meta.PostAction
  • ASP vista del motore: <%:Model.meta.PostAction%>

Entrambi i quali automaticamente codifica quella stringa per te.

Per risolvere il problema utilizzare sia @Html.Raw()/<%= (entrambi i quali non codificare) o fare la proprietà PostAction un IHtmlString che sa che è già stato codificato:

string actionUrl = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity}); 
Model.meta.PostAction = new HtmlString(actionUrl); 
+0

Questo ha fatto il trucco, grazie –

1

Prova questa sul tuo JS

myUrl = myUrl.replace(/&amp;/g, "&"); 
Problemi correlati