Url.Action menempatkan & amp; di url saya, bagaimana saya bisa mengatasi ini?

90

Saya ingin mengirim variabel itemId dan entityModel ke ActionResult CreateNote:

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

dengan javascript ini:

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

Namun, url yang sedang dikirim adalah

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

saya ingin mengirim

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

Bagaimana cara mencegah Url.Action meletakkan & di depan variabel kedua yang ingin saya kirim?

Niek de Klein
sumber
Apa yang membuat Anda berpikir itu &tidak baik?
Oded
1
Karena ketika saya melihat ActionResult dengan breakpoint, ketika saya memiliki localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? ModelEntity = Phrase & amp; itemId = 44 modelEntity = Phrase dan itemId = null. Ketika saya memutarnya dalam javascript dan mendapatkan localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? ItemId = 44 & amp; modelEntity = Frase itemId = 44 dan modelEntity = null. Itulah mengapa menurut saya ini ada hubungannya dengan & amp;
Niek de Klein
4
@Oded - karena data dimasukkan ke dalam JavaScript, bukan HTML.
Quentin

Jawaban:

127

Saya tidak memperhatikan kemarin bahwa Anda memiliki &saya pikir itu adalah editor SO telah mengubahnya. Cobalah membungkus Anda Url.Action()dengan a @Html.Raw()untuk mencegah Penyandian &.

Atau alternatifnya hanya Url.Action()controller / action bit dan meneruskan dua parameter sebagai data posting daripada langsung di url, jQuery harus memilah & untuk Anda seperti itu.

K. Bob
sumber
43
Solusi ini berfungsi, tetapi mengapa Url.Action bahkan dikodekan? Bicarakan tentang perilaku yang tidak terduga.
Jerry
13

Saya pikir masalah Anda adalah Model.meta.PostAction- apakah properti itu a string?

Jika demikian, tebakan saya adalah Anda menambahkannya ke halaman dengan:

  • Pisau cukur: @Model.meta.PostAction
  • Mesin tampilan ASP: <%:Model.meta.PostAction%>

Keduanya secara otomatis menyandikan string itu untuk Anda.

Untuk memperbaikinya gunakan @Html.Raw()/ <%=(keduanya tidak dienkode ) atau buat PostActionproperti IHtmlStringyang tahu bahwa itu sudah dienkode:

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