2010-07-08 70 views
7

Tôi có một hành động phụ thuộc vào danh sách các số nguyên. Bản năng đầu tiên của tôi là đơn giản tuyên bố hành động với một Danh sách.Làm cách nào để chuyển danh sách các số nguyên đến một hành động MVC?

tôi đã cố gắng tuyên bố hành động trong bộ điều khiển như:

public ActionResult EditMultiple(List<int> ids) 

và trong Xem kêu gọi của Mẹ như sau:

<%= Html.ActionLink("EditMultiple", "EditMultiple", new { ids = new List<int> {2, 2, 2} })%> 

Mặc dù nó biên dịch danh sách rỗng khi tôi đặt một breakpoint trong hoạt động. Bất cứ ai biết tại sao hoặc có một cách tiếp cận thay thế?

Thêm chi tiết về kịch bản:

Tôi đang cố gắng để "Chỉnh sửa" nhiều đối tượng cùng một lúc. Tôi đã ở điểm mà tôi có một ứng dụng cho phép tôi tạo/chỉnh sửa/xem thông tin về sách trong thư viện. Tôi có một phần xem cho phép người dùng chỉnh sửa thông tin về một cuốn sách và lưu nó vào cơ sở dữ liệu.

Bây giờ tôi muốn tạo Chế độ xem cho phép người dùng chỉnh sửa thông tin về nhiều sách bằng một nút gửi. Tôi đã tạo ra một hành động EditMultiple mà chỉ ám một phần cho mỗi cuốn sách (mô hình của tôi cho xem này là Danh sách) và thêm nút gửi sau đó.

+0

bạn đang đăng gì lên hành động? –

+0

Trong trường hợp này, ví dụ trên của tôi có phần gần với kịch bản thực của tôi. Đây là GET không phải là POST. Tôi sẽ cập nhật mô tả với một số thông tin thêm về kịch bản thực tế. – Justin

Trả lời

4

Có. Trình kết nối mô hình mặc định có thể liên kết "id" với bất kỳ ICollection nào. Nhưng bạn phải gửi nhiều tham số có cùng tên. Điều đó giúp loại bỏ bằng cách sử dụng phương thức trợ giúp "ActionLink". Bạn có thể sử dụng url helper hành động và thêm id để liên kết như sau:

<a href="<%= Url.Action("CreateMultiple")%>?ids=2&ids=1&ids=3">Test link</a> 

Here's the link từ khối Haack của.

+0

Không sử dụng trình trợ giúp Html nhưng các giá trị được mã hóa chỉ dành cho việc tạo mẫu để nó thực hiện thủ thuật. – Justin

2

Tôi không nghĩ rằng

new List<int> {2, 2, 2} 

bị đúng cách chuyển đổi thành một POST đó là bindable, bạn muốn gửi

Ids=1&Ids=2&Ids=3 

dấu phẩy danh sách riêng biệt cũng có thể làm việc, im không chắc chắn, i don' t sử dụng modelbinder mặc định crappy.

Tại sao bạn vẫn làm như vậy? Tôi hy vọng mã giả cho cái gì đó khác ...

+0

chi tiết khác được thêm vào câu hỏi. tất nhiên tôi không thực sự chỉnh sửa sách nhưng vì mục đích của cuộc thảo luận này là đủ tốt. Nếu bạn có thể nghĩ ra cách tốt hơn để chỉnh sửa nhiều sách hơn là tạo Hành động cho EditMultiple để hiển thị một phần cho từng mô hình trong danh sách, xin vui lòng tôi là tất cả các tai. Đây là ứng dụng MVC đầu tiên của tôi vì vậy tôi vẫn đang học các khuôn khổ và các mẫu thiết kế. – Justin

+0

Vì vậy, lưu ý cho những người tương lai đang cố gắng tìm ra, như tôi đã làm, cách gửi một hành động MVC mà khách hàng cũng đã đệ trình theo chương trình (thông qua FormUrlEncodedContent): điều đó có nghĩa là chỉ lặp lại và thêm cùng một khóa vào danh sách của KVPs bạn đang tạo FormUrlEncodedContent từ, nhiều lần, với các giá trị khác nhau (sau tất cả chỉ là một List , không phải là một Dictionary thích hợp, vì vậy nó được cho phép (và làm việc!) – neminem

Các vấn đề liên quan