2009-06-08 22 views
11

Tôi có một lớp dữ liệu có chứa một số lĩnh vực:Ràng buộc để một Bộ sưu tập của các đối tượng mạnh mẽ-gõ trong ASP.NET MVC

public class Person 
{ 
    public int id { get; set } 
    public string Name { get; set; } 
    public double Rate { get; set; } 
    public int Type { get; set; } 
} 

Nếu tôi hiểu Scott Hanselman's take on binding arrays of objects, tôi sẽ có thể tạo ra một cái nhìn hình thức mà ám HTML trông như thế này:

<input name="Person[0].id" value="26" type="hidden" /> 
<input name="Person[0].Name" value="Tom Smith" type="text" /> 
<input name="Person[0].Rate" value="40.0" type="text" /> 
<select name="Person[0].Type"> 
    <option selected="selected" value="1">Full Time</option> 
    <option value="2">Part Time</option> 
</select> 

<input name="Person[1].id" value="33" type="hidden" /> 
<input name="Person[1].Name" value="Fred Jones" type="text" /> 
<input name="Person[1].Rate" value="45.0" type="text" /> 
<select name="Person[1].Type"> 
    <option value="1">Full Time</option> 
    <option selected="selected" value="2">Part Time</option> 
</select> 

sau đó tôi sẽ có thể thu thập dữ liệu này trong bộ điều khiển của tôi với một phương pháp hành động mà trông như thế này:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult People(Person[] array) 
{ 
    // Do stuff with array 
} 

Nhưng nó không hoạt động. Biến mảng luôn là null. Tôi giải thích điều này vì ràng buộc dữ liệu không hoạt động. Nhưng tại sao?

+0

Có thể thử một danh sách chung thay vì một mảng. –

+0

Danh sách đã thử thay vì Person [], vẫn trả về giá trị rỗng. Mẫu Hanselman yêu cầu Person []. –

+0

Bạn đã sửa lỗi và phân tích dữ liệu POST của mình để xác minh rằng dữ liệu được đăng theo bài viết của Scott chưa? –

Trả lời

21

lĩnh vực của bạn nên được đặt tên mảng [0] .id array [0] .Type, ...

Họ nên có tên của instance mảng, không phải là tên của Type bên trong mảng.

Hoặc bạn có thể thay đổi chữ ký của actioncontroller tới: Person [] Người

Bạn nhận được điểm :-)

+4

Sonofabitch .... –

+0

Tôi mất khoảng 10 giây để xem liên kết bạn đăng .. đó là một trong những điều mù quáng mà tất cả chúng ta đều biết và ghét. ;-) –

6
<input name="Person[0].Rate" value="40.0" type="text" /> 

nên là:

<input name="array[0].Rate" value="40.0" type="text" /> 
Các vấn đề liên quan