Url.Action đặt một & amp; trong url của tôi, làm cách nào để giải quyết vấn đề này?


89

Tôi muốn gửi các biến itemId và entityModel đến ActionResult CreateNote:

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

với javascript này:

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

Tuy nhiên, url được gửi là

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

tôi muốn gửi

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

Làm cách nào để ngăn chặn Url.Action đặt & ở trước biến thứ hai mà tôi muốn gửi?


Điều gì khiến bạn nghĩ rằng điều đó &là không ổn?
Oded

1
Bởi vì khi tôi nhìn vào ActionResult bằng một điểm ngắt, khi tôi có localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? ModelEntity = Phrase & amp; itemId = 44 modelEntity = Phrase và itemId = null. Khi tôi xoay chúng lại trong javascript và nhận localhost: 1304 / Administration / blue / en-gb / Entity / CreateNote? ItemId = 44 & amp; modelEntity = Phrase itemId = 44 và modelEntity = null. Đó là lý do tại sao tôi nghĩ rằng nó liên quan đến & amp;
Niek de Klein

4
@Oded - vì dữ liệu đang được chèn vào JavaScript, không phải HTML.
Quentin

Câu trả lời:


126

Tôi đã không nhận thấy ngày hôm qua rằng bạn đã &tôi nghĩ rằng đó là trình soạn thảo SO đã thay đổi điều đó. Hãy thử gói của bạn Url.Action()trong một @Html.Raw()để ngăn Mã hóa của &.

Hoặc chỉ có Url.Action()bit controller / action và chuyển hai tham số dưới dạng dữ liệu bài đăng thay vì trực tiếp trên url, jQuery sẽ sắp xếp & 's cho bạn theo cách đó.


43
Giải pháp này hoạt động, nhưng tại sao Url.Action thậm chí còn được mã hóa? Nói về hành vi bất ngờ.
Jerry

13

Tôi nghĩ vấn đề của bạn là Model.meta.PostAction- đó có phải là tài sản stringkhông?

Nếu vậy thì tôi đoán là bạn đang thêm nó vào trang bằng:

  • Dao cạo: @Model.meta.PostAction
  • Công cụ xem ASP: <%:Model.meta.PostAction%>

Cả hai đều tự động mã hóa chuỗi đó cho bạn.

Để khắc phục, hãy sử dụng @Html.Raw()/ <%=(cả hai đều không mã hóa) hoặc đặt thuộc PostActiontính IHtmlStringbiết rằng nó đã được mã hóa:

string actionUrl = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});
Model.meta.PostAction = new HtmlString(actionUrl);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.