2010-04-19 24 views
10

Tôi có một hình thức, trong đó có một loạt các lĩnh vực như:Có phải POST một từ điển cho một hành động .NET MVC có thể không?

<input type="text" name="User[123]" value="Alice" /> 
<input type="text" name="User[456]" value="Bob" /> 
... 

Trong trường hợp chỉ số của mảng tài khoản (123 và 456) là kết hợp với giá trị của ID. Tôi đang cố gắng cập nhật các giá trị này trong bộ điều khiển. suy nghĩ của tôi là một điển mà các bản đồ ID để tên sẽ làm việc, nhưng việc tạo ra các hành động như:

public void Save(Dictionary<string, string> user) { 
    // ... 
} 

kết quả trong tham số người dùng là null.

Vì vậy, đang chuyển một Từ điển có thể? hoặc, có phương pháp nào khác để đạt được điều này không?

Trả lời

11

Có thể có trong danh sách, tôi chắc chắn rằng nó cũng sẽ chuyển sang từ điển. Đọc qua Model Binding to a List bởi Phil Haack vì một số hiểu biết về cách hoạt động của danh sách liên kết.

Bạn sẽ có thể làm điều này:

<input type="hidden" name="User.Index" value="123" /> 
<input type="text" name="User[123]" value="Alice" /> 

<input type="hidden" name="User.Index" value="456" /> 
<input type="text" name="User[456]" value="Bob" /> 
+1

Bài đăng đó đã lỗi thời. Định dạng liên kết đến danh sách đã thay đổi, bạn không cần chỉ định chỉ mục. – queen3

+1

Bài đăng không lỗi thời. Nó được cập nhật với thông tin liên quan đến MVC 2 và có tính đến ".index" là tùy chọn. – Levi

+0

@Levi Bạn có chắc chắn không? Mẫu mã ở trên không hiệu quả với tôi. Tôi nhận được null như tham số người dùng trong phương thức Save. Tôi có MVC 2 RTM và VS 2008. –

7

Đối với ASP.NET MVC 2 sử dụng này:

<input type="hidden" name="User[0].Key" value="123" /> 
<input type="text" name="User[0].Value" value="Alice" /> 

<input type="hidden" name="User[1].Key" value="456" /> 
<input type="text" name="User[1].Value" value="Bob" /> 

Bạn cần có thêm ẩn lĩnh vực tài [i] .Key. i là chỉ số dựa trên zero. Nó không bị gián đoạn.

khi bạn liên kết mô hình với từ điển, bạn đang thực sự gắn với ICollection<KeyValuePair<,>>. Vì vậy, bạn cần tài khoản [x] .Key và User [x] .Value (để pha đối tượng KeyValuePair)

Tài liệu tham khảo

+1

Tôi đã tạo ra phương pháp mở rộng trợ giúp HTML để có thể làm điều này cho bạn: xem https://github.com/ErikSchierboom/aspnetmvcdictionaryserialization –

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