2011-11-06 24 views
5

Tôi chỉ đang học MVC và dường như không thể tìm ra cách xử lý kịch bản sau đây, tôi có một biểu mẫu có địa chỉ giao hàng và địa chỉ thanh toán. Tất cả các trường đều được yêu cầu. Ngoài ra còn có một hộp kiểm cho "Địa chỉ thanh toán giống như địa chỉ giao hàng". Vấn đề của tôi là trạng thái mô hình không bao giờ hợp lệ trừ khi cả hai địa chỉ được hoàn thành. Tôi có thể xử lý này khá dễ dàng với một số javascript mà chỉ cần thêm các giá trị từ địa chỉ vận chuyển đến các lĩnh vực địa chỉ thanh toán, nhưng nếu có một cách tốt hơn để xử lý này tôi muốn biết. Bất kỳ dòng hướng dẫn nào về cách xử lý thông thường sẽ là tuyệt vời. Cảm ơn!Làm cách nào để xử lý xác thực có điều kiện trong MVC3?

+0

Địa chỉ thanh toán và địa chỉ giao hàng của bạn có riêng biệt không? Hoặc một mô hình được đóng gói cùng nhau? – chemicalNova

+0

Chúng nằm trên cùng một kiểu máy. Cả hai đều là thuộc tính cùng loại. – Mike

Trả lời

4

Có nhiều cách để xử lý việc này. Nếu bạn không sử dụng xác thực phía máy khách, thì bạn có thể chỉ cần triển khai IValidatableObject trên mô hình và ghi đè phương thức IsValid() và thực hiện một số mã để kiểm tra tính hợp lệ của mô hình.

Nếu bạn đang sử dụng xác thực phía máy khách, thì bạn cần thuộc tính tùy chỉnh hoặc sử dụng một cái gì đó như fluent validation.

4

Bạn có thể thực hiện điều này bằng cách tạo ra một thuộc tính xác nhận tùy chỉnh:

http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

Các ý chính của nó là bạn tạo ra một lớp mới based off ValidationAttribute, và IClientValidatable, ghi đè lên và thực hiện khi cần thiết, thêm khách hàng- của bạn xác nhận phụ (bạn cần bất kỳ cách nào) và áp dụng thuộc tính cho trường tùy chọn của bạn.

Hoặc vì việc xác thực có thể phức tạp như bạn muốn, hãy áp dụng nó trên trường được chia sẻ một phần, tùy chọn được chia sẻ một phần.

Anh chàng đó cũng có alpha của thư viện mà anh ấy viết để làm cho xác thực MVC linh hoạt hơn. Đã không sử dụng nó bản thân mình, nhưng you could give it a try.

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