2009-02-05 41 views
5

Ví dụ công khai tốt nhất mà tôi có thể nghĩ ra khỏi đỉnh đầu của tôi là giỏ hàng amazon. Nơi bạn có một trang hiển thị nhiều bản ghi riêng biệt có thể có nhiều trường riêng biệt được cập nhật.Cách tốt nhất để xử lý các biểu mẫu lặp trong MVC là gì?

Tôi không thể đặt từng thẻ trong thẻ biểu mẫu vì người dùng có thể sửa đổi nhiều bản ghi rồi gửi.

tôi không thể chỉ cập nhật tất cả các hồ sơ mà tôi có được trở lại bởi vì:
1. Hiệu suất
2. Kiểm toán
3. Nếu ai đó thay đổi các bản ghi mà người dùng 'không thay đổi' khi họ xem trang và sau đó người dùng gửi những thay đổi đó sẽ bị ghi đè.

Vậy làm cách nào để xử lý tốt nhất việc lấy lại dữ liệu và sau đó nhận được bản ghi nào được thay đổi?

Điều đó có rõ ràng không?

Trả lời

3

Sử dụng tính ràng buộc! Đừng lặp lại bộ sưu tập biểu mẫu trong hành động của bạn.

Steve Sanderson đã viết blog post về cách thực hiện. Tôi đã viết blog post về cách thực hiện với MvcContrib. FluentHtml. Cả hai bài đăng đều rất chi tiết và bao gồm cả mã có thể tải xuống.

1

Tạo biểu mẫu của bạn trong bộ lặp và thêm ID vào các phần tử biểu mẫu tăng dần theo từng biểu mẫu mới. Lưu số phần tử biểu mẫu lặp lại trong trường ẩn. Sau đó, trong bộ điều khiển của bạn, đọc giá trị của trường ẩn này - đó sẽ là số biểu mẫu để đọc. Sau đó, trong một vòng lặp, truy xuất từng trường của biểu mẫu bằng cách chỉ định tên của trường, cộng với chỉ số vòng lặp được thêm vào tên, làm khóa.

Bạn có thể sử dụng một số logic javascript để phát hiện khi giá trị của một biểu mẫu thay đổi và cập nhật trường ẩn trong phần của biểu mẫu đó nếu điều đó xảy ra; hoặc bạn có thể ẩn các giá trị ban đầu bên trong một trường ẩn với mỗi phần biểu mẫu (mặc dù tôi không khuyên bạn nên điều này là quá nhiều trường/biểu mẫu sẽ làm nổi bật trang của bạn).

+0

Tôi nghĩ tôi thích điều đó. Các lĩnh vực ẩn + JS cập nhật để nói khi một bản ghi được thay đổi là những gì tôi đã không nghĩ đến. Tôi nghĩ rằng tôi thậm chí sẽ có thể viết một mô hình kết dính để có được một bộ sưu tập trở lại như một tham số hành động. –

+0

Một chất kết dính mô hình sẽ là một cách tốt để đi, chắc chắn. :) Hãy cho chúng tôi biết làm thế nào nó đi. –

1

phương pháp tiếp cận một (nhưng không nhất thiết là tốt nhất) là lưu trữ các mục được thay đổi theo biến js hoặc thứ gì đó ở phía máy khách khi chúng được thay đổi và sau đó chỉ gửi dữ liệu khác người dùng đã nhận được.

và như Erik đã nói, bạn có thể sử dụng các phần tử biểu mẫu ẩn để đảm bảo rằng nó hoạt động mà không cần js.

+0

Đây là một giải pháp tốt - và nếu bạn bao gồm nội dung câu trả lời của tôi, thì bạn có một giải pháp làm giảm lưu lượng truy cập trong trường hợp phổ biến, nhưng giảm xuống một cách duyên dáng trong trường hợp không phổ biến của người dùng không bật JS . –

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