Url.Action bir & amp; url’imde bunu nasıl çözebilirim?


90

İtemId ve entityModel değişkenlerini ActionResult CreateNote'a göndermek istiyorum:

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

bu javascript ile:

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

Ancak, gönderilen url

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

Ben göndermek istiyorum

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

Url.Action'ın göndermek istediğim ikinci değişkenin önüne & koymasını nasıl engelleyebilirim?


Bunun &tamam olmadığını düşündüren nedir ?
Oded

1
Çünkü ActionResult'a bir kesme noktası ile baktığımda, localhost'a sahip olduğumda: 1304 / Administration / blue / en-gb / Entity / CreateNote? ModelEntity = Phrase & amp; itemId = 44 modelEntity = Phrase ve itemId = null. Bunları javascript'te çevirip localhost'u aldığımda: 1304 / Administration / blue / en-gb / Entity / CreateNote? İtemId = 44 & amp; modelEntity = Phrase itemId = 44 ve modelEntity = null. Bu yüzden & amp;
Niek de Klein

4
@Oded - çünkü veriler HTML'ye değil JavaScript'e ekleniyor.
Quentin

Yanıtlar:


128

&SO editörünün bunu değiştirdiğini düşündüğümü dün fark etmemiştim . & Kodunu önlemek için içeriğinizi Url.Action()bir @Html.Raw()içine sarmayı deneyin .

Veya alternatif olarak yalnızca Url.Action()denetleyici / işlem biti ve iki parametreyi doğrudan url'den ziyade post veri olarak iletir, jQuery & 'leri sizin için bu şekilde düzenlemelidir.


43
Bu çözüm işe yarıyor, ancak Url.Action neden kodlanıyor? Beklenmedik davranışlar hakkında konuşun.
Jerry

13

Sanırım sorunun Model.meta.PostActionşu ki - bu özellik a stringmı?

Öyleyse, tahminim, onu sayfaya aşağıdakilerden biri ile eklediğinizdir:

  • Ustura: @Model.meta.PostAction
  • ASP görüntüleme motoru: <%:Model.meta.PostAction%>

Her ikisi de bu dizeyi sizin için otomatik olarak kodlar.

Düzeltmek için @Html.Raw()/ kullanın <%=(her ikisi de kodlamaz) veya PostActionözelliği IHtmlStringzaten kodlanmış olduğunu bilen bir hale getirin:

string actionUrl = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});
Model.meta.PostAction = new HtmlString(actionUrl);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.