2010-06-17 3 views
5

Trong trang ASP.NET MVC của tôi, một phần của một tính năng cho phép người dùng nhập giờ khi một địa điểm nào đó được mở.ASP.NET MVC Model Binding vào danh sách

Tôi đã quyết định lưu trữ những giờ này trong bảng VenueHours trong cơ sở dữ liệu của mình, với mối quan hệ FK-to-PK tới bảng Địa điểm, cũng như các tham số DayOfWeek, OpeningTime và ClosingTime.

Trong chế độ xem của tôi, tôi muốn cho phép người dùng chỉ nhập thời gian họ biết; nói cách khác, một số ngày có thể không được điền vào cho một Địa điểm. Tôi đang nghĩ đến việc tạo các hộp kiểm mà người dùng có thể kiểm tra để kích hoạt các trường OpeningTime và ClosingTime cho DayOfWeek mà hộp kiểm thuộc về.


Câu hỏi của tôi liên quan đến làm thế nào để vượt qua thông tin này để HttpPost tôi điều khiển hành động.

Như tôi biết số lượng ngày tối đa có thể được chuyển vào (7), tôi có thể viết 7 tham số VenueHour vào Hành động của tôi, nhưng tôi chắc chắn có cách tốt hơn.

Tôi có thể bằng cách nào đó ràng buộc thông tin Xem vào Danh sách được chuyển đến Hành động của tôi không? Điều này cũng sẽ giúp tôi nếu tôi gặp phải trường hợp không có giới hạn về số lượng thông tin mà người dùng có thể điền.

Trả lời

13

Scott Hanselman đăng một số liên kết mô hình mặc định với bộ sưu tập, mảng và từ điển. Thật tuyệt vời nếu bạn không muốn viết một mô hình tùy chỉnh chất kết dính, mặc dù viết một chất kết dính mô hình tùy chỉnh không phải là một thỏa thuận lớn.

+0

Tuyệt vời! Sẽ cố gắng sử dụng điều này. –

+0

Ngoài ra, có thể sử dụng thuộc tính [Ràng buộc (Loại trừ = "...")] để không ràng buộc một số tham số bên trong mỗi đối tượng trong Danh sách không? –

1

Vui lòng thử các bước sau

1 - Nơi tất cả các hộp đầu vào (có thể được phổ biến bởi DatePicker kiểm soát JQuery) bên trong một div trong giao diện aspx.

2 - sử dụng bộ chọn Jquery để nắm bắt tất cả các giá trị (bên trong DIV được chỉ định ở trên) cần được đăng lên phương thức Hành động, thành một mảng JavaScript ở phía máy khách.

vui lòng tham khảo Filtering input elements inside DIV

var enteredVenueHours = new Array(); 
for(var i=0;i < inputsInsideDiv.length;i++) 
{ 
    // add the elements to the JS array 
} 

3 - Sử dụng các bài jquery để gửi enteredVenueHours trở lại controller action **

$.post('<%=Url.Action("ActionMethod")%>',{ EnteredVenueHours: enteredVenueHours,function (data) 
{ 
    // Udpate status to be displayed here. 
}); 

4 - Đảm bảo phương pháp hành động điều khiển có chữ ký sau

[AcceptVerbs(HTTP.Post)] 
public ActionResult ActionMethod(List<string> EnteredVenueHours) 
{ 
    // Have the DB persistance logic . 
}