Tôi đang cố truyền một mảng int từ JavaScript tới một bộ điều khiển MVC chấp nhận 2 tham số - một mảng int và một int. Điều này là để thực hiện một chuyển hướng trang để xem được trả về bởi các hành động điều khiển.Truyền một mảng int tới Bộ điều khiển MVC
var dataArray = getAllIds(); //passes back a JavaScript array
window.location.replace("/" + controllerName + "/EditAll?ids=" + dataArray + "¤tID=" + dataArray[0])
dataArray chứa 1,7 như mong đợi cho việc sử dụng mẫu của tôi.
điều khiển Mã
public virtual ActionResult EditAll(int[] ids, int currentID)
{
currentModel = GetID(currentID);
currentVM = Activator.CreateInstance<ViewModel>();
currentVM.DB = DB;
currentVM.Model = currentModel;
currentVM.ViewMode = ViewMode.EditAll;
currentVM.ModelIDs = ids;
if (currentModel == null)
{
return HttpNotFound();
}
return View("Edit", MasterName, currentVM);
}
Vấn đề là khi kiểm tra việc int [] id truyền cho bộ điều khiển, giá trị của nó là null. currentID được đặt thành 1 như mong đợi.
Tôi đã thử đặt jQuery.ajaxSettings.traditional = true không có hiệu lực Tôi cũng đã thử tạo url phía máy chủ bằng cách sử dụng @ Url.Action trong JavaScript. Tôi cũng đã thử JSON.Stringify trước khi chuyển mảng, ví dụ:
window.location.replace("/" + controllerName + "/EditAll?ids=" + JSON.stringify(dataArray) + "¤tID=" + dataArray[0])
Một lần nữa mảng id kết thúc bằng null ở phía bộ điều khiển.
Có ai có bất kỳ gợi ý nào về việc đưa mảng int vào bộ điều khiển chính xác không? Tôi có thể khai báo các tham số như String trong hành động điều khiển và serialize bằng tay và de-serialize tham số nhưng tôi cần phải hiểu làm thế nào để có được khuôn khổ để tự động làm chuyển đổi loại đơn giản.
Cảm ơn!
Bạn không cần phải tạo một chuỗi dài bằng cách lặp lại mảng và thêm từng phần tử vào chuỗi truy vấn? –
Bạn đã gắn thẻ rằng bạn đang sử dụng jQuery, vì vậy bạn sẽ có thể sử dụng '$ .param' http://api.jquery.com/jQuery.param/ để tạo các giá trị được mã hóa cho bạn, ví dụ: 'window.location.replace ("/"+ controllerName +"/EditAll? "+ $ .param ({ids: dataArray, currentId: dataArray [0]}))' –