2012-01-03 16 views
63

Quiero enviar las variables itemId y entityModel a la ActionResult CreateNote:Url.Action pone un & en mi url, ¿cómo puedo solucionar esto?

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

con este javascript:

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

Sin embargo, el ser enviar URL es

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

quiero para enviar

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

¿Cómo puedo evitar que Url.Action ponga el & frente a la segunda variable que deseo enviar?

+0

¿Qué le parece que '&' no es correcto? – Oded

+1

Porque cuando miro el ActionResult con un punto de interrupción, cuando tengo localhost: 1304/Administration/blue/en-gb/Entity/CreateNote? ModelEntity = Frase & itemId = 44 modelEntity = Frase y itemId = null. Cuando los cambio en javascript y obtengo localhost: 1304/Administration/blue/en-gb/Entity/CreateNote? ItemId = 44 & modelEntity = Frase itemId = 44 y modelEntity = null. Es por eso que creo que tiene que ver con & –

+4

@Oded, porque los datos se insertan en JavaScript, no en HTML. – Quentin

Respuesta

94

No me di cuenta ayer que tenías & Pensé que era el editor de SO lo que había cambiado. Intente envolver su Url.Action() en un @Html.Raw() para evitar el código de &.

O, como alternativa, solo Url.Action() el bit de controlador/acción y pasa los dos parámetros como datos de publicación en lugar de directamente en la url, jQuery debe ordenar los & de esa manera.

+1

Sí, eso funcionó muchas gracias –

+26

Esta solución funciona, pero ¿por qué Url.Action incluso se codifica? Habla sobre comportamiento inesperado. – Jerry

+0

funcionó, gracias –

11

Creo que su problema es con Model.meta.PostAction - ¿es esa propiedad un string?

Si es así, creo que ha de ser que va a añadir a la página, ya sea con:

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

Ambos de los cuales automáticamente codifica esa cadena por ti.

Para solucionarlo o bien utilizar @Html.Raw()/<%= (ambos de los cuales no codifican) o hacer que la propiedad PostAction un IHtmlString que sabe que ya se ha codificado:

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

Eso hizo el truco, gracias –

1

probar este en su JS

myUrl = myUrl.replace(/&amp;/g, "&"); 
Cuestiones relacionadas