2009-01-02 29 views
9

Lấy các lớp ví dụ bên dưới. Tôi muốn hiển thị khách hàng và hai địa chỉ (từ một DANH SÁCH) trên một biểu mẫu. Liệu mô hình kết hợp trong MVC beta có hỗ trợ điều này hay tôi sẽ phải viết liên kết tùy chỉnh của riêng tôi?Trình mô hình hóa trong Danh sách hỗ trợ ASP.NET MVC Beta <T>?

public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public List<Address> Addresses { get; set; } 

    public Customer() 
    { 
     Addresses = new List<Address>(); 
    } 

} 

public class Address 
{ 
    public int Line1 { get; set; } 
    public int Line2 { get; set; } 
    public int City { get; set; } 
    public int State { get; set; } 
    public int Zip { get; set; } 
} 

Bạn sẽ mã hóa các trường như thế nào? Như thế này?

<!-- some HTML formatting --> 
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[0].Line1)%> 
<!-- some more HTML formatting --> 
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[1].Line1)%> 
<!-- end of HTML form formatting --> 

Trả lời

5

Tôi chưa bao giờ thử nó, nhưng xem this bài đăng, đó là về mô hình ràng buộc với danh sách, có thể nó có thể giúp bạn.

0

Bạn có thể chuyển danh sách đối tượng bằng ViewData như thế, nhưng bạn cần phải thay đổi một số dòng. Đọc thêm ở đây:

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

và ở đây:

ASP.NET MVC: How do I pass a list (from a class in Model) to a repeater in a View?

Hope this helps


Sửa


Nếu bạn sử dụng một mô hình, bạn cần phải thiết lập DataContext đầu tiên và chọn danh sách, nhưng chắc chắn bạn có thể sử dụng các lớp được tạo ra nếu bạn sử dụng LINQ.

0

Tôi đã xác định một đối tượng tương tự. Tôi theo sau bài viết trên ràng buộc vào một danh sách như tham chiếu ở trên, Trong khi các công trình ràng buộc, tôi đã không thể sử dụng danh sách trắng Bind hoặc danh sách đen trong tham số hành động của bộ điều khiển. Mô hình là một IList

1

Sử dụng tên của MvcContribValueDeserializer để làm cho nó đơn giản hơn. Giả sử rằng trang của bạn xuất phát từ ViewPage <Customer>. Bạn có thể làm điều này:

<%= Html.TextBox("Address[0].Line1", ViewData.Model.Address[0].Line1)%> 
<%= Html.TextBox("Address[1].Line1", ViewData.Model.Address[1].Line1)%> 

Và đây:

public ActionResult Save([Deserialize]Customer customer) 

Và khách hàng sẽ được deserialized từ bài mẫu với bộ sưu tập địa chỉ cư. Các chỉ mục của bạn không phải theo thứ tự - điều này hỗ trợ các trường hợp bạn muốn xóa các hàng ở phía máy khách trước khi bài đăng xảy ra.

Trong trường hợp bạn đang deserializing một cái gì đó từ từ điển dữ liệu xem (thay vì Model), sau đó cú pháp giống như [Deserialize ("khách hàng")], nơi "khách hàng" là tiền tố.

Bạn có thể tìm thấy điều này blog post thú vị và có liên quan.

1

Chỉ cần thực hiện việc này hoàn chỉnh. Điều quan trọng là bạn sử dụng các trường ẩn với tên Chỉ mục. Vì vậy, mã của tôi ở trên trở thành điều này:

<!-- some HTML formatting --> 
<%= Html.Hidden("customer.address.Index", 0) %> 
<%= Html.TextBox("customer.address[0].line1", ViewData.Customer.Address[0].Line1)%> 
<!-- some more HTML formatting --> 
<%= Html.Hidden("customer.address.Index", 1) %> 
<%= Html.TextBox("customer.address[1].line1", ViewData.Customer.Address[1].Line1)%> 
<!-- end of HTML form formatting --> 

Nó hoạt động như một sự quyến rũ!

+0

Tôi nghĩ rằng tôi sẽ cần một cái gì đó như thế này trong tương lai gần, câu hỏi hay. –

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