Url.Action ทำให้ & amp; ใน url ของฉันฉันจะแก้ปัญหานี้ได้อย่างไร


90

ฉันต้องการส่งตัวแปร itemId และ entityModel ไปยัง ActionResult CreateNote:

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

ด้วยจาวาสคริปต์นี้:

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

อย่างไรก็ตาม URL ที่กำลังส่งคือ

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

ฉันต้องการส่ง

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

ฉันจะป้องกันไม่ให้ Url.Action วางเครื่องหมาย & ไว้หน้าตัวแปรที่สองที่ฉันต้องการส่งได้อย่างไร


อะไรที่ทำให้คุณคิดว่า&ไม่ตกลง?
Oded

1
เพราะเมื่อฉันดู ActionResult ด้วยเบรกพอยต์เมื่อฉันมี localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? modelEntity = Phrase & amp; itemId = 44 modelEntity = Phrase และ itemId = null เมื่อฉันเปิดใช้งาน javascript และรับ localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? itemId = 44 & amp; modelEntity = Phrase itemId = 44 และ modelEntity = null นั่นเป็นเหตุผลที่ฉันคิดว่ามันเกี่ยวข้องกับ & amp;
Niek de Klein

4
@Oded - เนื่องจากข้อมูลถูกแทรกลงใน JavaScript ไม่ใช่ HTML
Quentin

คำตอบ:


128

ฉันไม่ได้สังเกตเมื่อวานนี้ว่าคุณ&คิดว่านั่นคือตัวแก้ไข SO ได้เปลี่ยนสิ่งนั้น ลองห่อของคุณUrl.Action()ใน a @Html.Raw()เพื่อป้องกันการเข้ารหัสของ &

หรืออีกทางเลือกเดียวUrl.Action()คือคอนโทรลเลอร์ / บิตการดำเนินการและส่งผ่านพารามิเตอร์ทั้งสองเป็นข้อมูลโพสต์แทนที่จะไปที่ url โดยตรง jQuery ควรจัดเรียง & 's ให้คุณด้วยวิธีนั้น


43
โซลูชันนี้ใช้งานได้ แต่ทำไม Url.Action ถึงได้รับการเข้ารหัส พูดคุยเกี่ยวกับพฤติกรรมที่ไม่คาดคิด
Jerry

13

ฉันคิดว่าปัญหาของคุณคือModel.meta.PostAction- คุณสมบัตินั้นคือstringอะไร?

ถ้าเป็นเช่นนั้นฉันเดาว่าคุณกำลังเพิ่มลงในหน้าด้วย:

  • มีดโกน: @Model.meta.PostAction
  • ASP ดูเอ็นจิ้น: <%:Model.meta.PostAction%>

ซึ่งทั้งสองจะเข้ารหัสสตริงนั้นให้คุณโดยอัตโนมัติ

หากต้องการแก้ไขให้ใช้@Html.Raw()/ <%=(ทั้งสองอย่างไม่เข้ารหัส) หรือทำให้PostActionคุณสมบัติเป็นIHtmlStringที่รู้ว่าได้เข้ารหัสแล้ว:

string actionUrl = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});
Model.meta.PostAction = new HtmlString(actionUrl);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.