2010-05-04 68 views
8

Sử dụng MVC2, tôi có một ViewModel đơn giản có chứa trường bool được hiển thị trên dạng xem dưới dạng hộp kiểm. Tôi muốn xác thực rằng người dùng đã chọn hộp. Thuộc tính [Bắt buộc] trên ViewModel của tôi dường như không thực hiện thủ thuật. Tôi tin rằng điều này là do trường biểu mẫu hộp kiểm không được chọn không thực sự được truyền lại trong POST, và do đó việc xác thực không chạy trên nó.Làm cách nào để bạn xác thực một hộp kiểm trong ASP.Net MVC 2?

Có cách nào tiêu chuẩn để xử lý hộp kiểm "yêu cầu" xác nhận trong MVC2? hoặc tôi có phải viết trình xác nhận tùy chỉnh cho nó không? Tôi nghi ngờ trình xác thực tùy chỉnh sẽ không được thực hiện hoặc vì lý do được đề cập ở trên. Tôi có bị kẹt kiểm tra nó một cách rõ ràng trong bộ điều khiển của tôi không? Điều đó có vẻ lộn xộn ...

Bất kỳ hướng dẫn nào cũng sẽ được đánh giá cao.

Scott

EDIT cho rõ ràng: Như đã chỉ ra trong ý kiến ​​dưới đây, đây là một loại "đồng ý với các điều khoản của chúng tôi" của hộp kiểm, và do đó "không được chọn" là một câu trả lời hợp lệ, vì vậy tôi thực sự mong để xác thực "được chọn".

+1

Đây có phải là loại "Tôi chấp nhận các điều khoản của thỏa thuận cấp phép" không? Thuộc tính [Bắt buộc] không hoạt động vì hộp kiểm không được chọn là giá trị hợp lệ (sai). –

+0

Vâng, chính xác là như vậy và nếu họ không kiểm tra, chúng tôi sẽ chỉ hiển thị lại cùng một chế độ xem với thông báo xác thực mà bạn phải chấp nhận các điều khoản để tiếp tục. Tôi thấy quan điểm của bạn về giả là "hợp lệ" mặc dù. –

+0

Câu trả lời ở đây có cách làm tốt để làm việc với trình xác thực ứng dụng khách: [http://stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate] (http:// stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate) –

Trả lời

13

trình xác thực tùy chỉnh là cách để thực hiện. Tôi sẽ đăng mã của mình mà tôi đã sử dụng để xác thực rằng người dùng chấp nhận các điều khoản ...

public class BooleanRequiredToBeTrueAttribute : RequiredAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     return value != null && (bool)value; 
    } 
} 
+0

Điều này cũng xác thực mặt khách hàng? – jrummell

+0

không tự động như tôi biết. Để tạo xác nhận phía máy khách, bạn phải tạo trình xác nhận hợp lệ để xác thực tùy chỉnh. xem liên kết sau để biết chi tiết về cách triển khai: http://www.highoncoding.com/Articles/729_Creating_Custom_Client_Side_Validation_in_ASP_NET_MVC_2_0.aspx Bạn phải tạo một DataAnnotationsModelValidator để xác thực tùy chỉnh – SQueek

0

Tôi cũng đang tìm cách để mô hình hóa chính xác xử lý các hộp kiểm với giá trị Boolean. Trong thời gian đó, tôi đang sử dụng tính năng này trong Tác vụ:

Object.Property = !String.IsNullOrEmpty(Request.Form["NAME"]); 

Có thể điều này sẽ có ích đối với bạn.

12

Tôi thường sử dụng:

[RegularExpression("true")] 
+2

Tôi thích trang này, mặc dù tôi đã phải tinh chỉnh nó điều này: '[RegularExpression (" true | True ")]' để có được nó làm việc cho tôi. (Tôi đang sử dụng MVC3, nếu điều đó tạo nên sự khác biệt?) – Merenzo

+0

nó có cung cấp cho bạn xác thực phía khách hàng không? có mặt máy chủ một cách chính xác – Shekhar

6

Nếu bạn không muốn tạo validator tùy chỉnh của riêng bạn và vẫn muốn sử dụng các thuộc tính tồn tại trong mô hình mà bạn có thể sử dụng:

[Range(typeof(bool), "true", "true", ErrorMessage="You must accept the terms and conditions.")] 

Đảm bảo này rằng phạm vi giá trị boolean là giữa true và true. Tuy nhiên, trong khi phương thức này sẽ hoạt động, tôi vẫn muốn sử dụng trình xác thực tùy chỉnh trong trường hợp này. Tôi chỉ nghĩ rằng tôi muốn đề cập đến điều này như là một lựa chọn thay thế.

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