2012-01-03 27 views
63

Tôi muốn gửi các biến ItemID và EntityModel đến ActionResult CreateNote:Url.Action đặt một & vào url của tôi, làm cách nào tôi có thể giải quyết vấn đề này?

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 phú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 không cho Url.Hãy đặt & vào trước biến thứ hai mà tôi muốn gửi?

+0

Điều gì khiến bạn nghĩ rằng '& 'không ổn? – Oded

+1

Bởi vì khi tôi nhìn vào ActionResult với một điểm ngắt, khi tôi có localhost: 1304/Quản trị/xanh/en-gb/Entity/CreateNote? ModelEntity = Phrase & itemId = 44 modelEntity = Cụm từ và itemId = null. Khi tôi chuyển chúng xung quanh trong javascript và nhận được localhost: 1304/Quản trị/xanh/en-gb/Entity/CreateNote? ItemId = 44 & modelEntity = Phrase itemId = 44 và modelEntity = null. Đó là lý do tại sao tôi nghĩ rằng nó phải làm với & –

+4

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

Trả lời

94

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

Hoặc cách khác chỉ Url.Action() bit bộ điều khiển/hành động và chuyển hai tham số dưới dạng dữ liệu bài đăng chứ không phải trực tiếp trên url, jQuery nên sắp xếp theo cách của bạn theo cách của bạn là &.

+1

Có điều đó làm việc cảm ơn rất nhiều –

+26

Giải pháp này hoạt động, nhưng tại sao Url.Action thậm chí nhận được mã hóa? Nói về hành vi không mong muốn. – Jerry

+0

nó hoạt động, cảm ơn –

11

Tôi nghĩ vấn đề của bạn là với Model.meta.PostAction - thuộc tính đó có phải là string không?

Nếu vậy thì tôi đoán sẽ được rằng bạn đang thêm nó vào trang bằng một trong hai:

  • Razor: @Model.meta.PostAction
  • công cụ xem ASP: <%:Model.meta.PostAction%>

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

Để khắc phục nó, hoặc sử dụng @Html.Raw()/<%= (cả hai đều không mã hóa) hoặc làm cho PostAction sở hữu một IHtmlString mà biế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); 
+0

Điều đó đã làm được điều đó, cảm ơn –

1

Hãy thử điều này trên JS của bạn

myUrl = myUrl.replace(/&amp;/g, "&"); 
Các vấn đề liên quan