2009-10-17 50 views
9

Tôi đang cố gắng để theo dõi thông qua lý do tại sao ASP.NET MVC 2 xác nhận của tôi không hoạt động, nhưng tôi không thể tìm thấy đủ về CÁCH nó hoạt động để có thể làm điều này.Xác thực trong ASP.NET MVC 2 thực sự hoạt động như thế nào?

Tôi đã làm theo các bước trong số useful article by David Hayden có vẻ là tài liệu tốt nhất hiện có trên mạng, nhưng không có gì thực sự xảy ra.

Tôi nhận được xác thực khi tôi gửi đến máy chủ (như tôi đã làm từ khi xem trước 1 khi tôi thêm chú thích dữ liệu vào mô hình của mình) nhưng tôi không nhận được bất kỳ xác thực phía khách hàng nào.

Tôi làm cách nào để theo dõi để kiểm tra? Cho đến nay tôi đã xác minh những điều hiển nhiên sau

  • MicrosoftMvcJQueryValidation.js và các tập tin jquery.validate.min.js đang được tải về
  • Html.ClientValidationEnabled = true

tôi không thể nhìn thấy dễ dàng là những gì hooking lên mà các sự kiện để biết khá làm thế nào để gỡ lỗi nó.

Trả lời

3

Để trường được xác thực phía máy khách, bạn phải chỉ định cuộc gọi đến Html.ValidationMessage/Html.ValidationMessageFor <> cho trường (giống như David đã làm trong hướng dẫn bạn đã liên kết) trong chế độ xem. Về cơ bản, đây là một kích hoạt cho logic xác thực phía máy khách mà bạn muốn chạy xác thực cho trường đó.

Nếu có trường hợp bạn không thực sự muốn thông báo xác thực để hiển thị trực quan cho từng trường (tức là bằng cách sử dụng Html.ValidationMessage), nhưng thay vì cho phép tóm tắt là nguồn duy nhất của thông báo lỗi xác thực (ví dụ: bằng cách sử dụng Html.ValidationSummary), bạn vẫn cần một số cách để "kích hoạt" xác thực xảy ra cho các trường cụ thể mà bạn muốn. Điều này có thể đạt được bằng cách sử dụng các phương thức Html.Validate/Html.ValidateFor <> trong chế độ xem của bạn. Những người trợ giúp đó sẽ không hiển thị bất kỳ thứ gì, nhưng chỉ đơn giản là sẽ đăng ký trường được chỉ định để xác thực phía máy khách.

Cả hai yêu cầu này tồn tại vì bạn có thể không muốn xác thực phía máy khách tự động xác thực mọi thuộc tính trên đối tượng mô hình của bạn, vì một số có thể không phải là một phần của biểu mẫu mà bạn muốn xác thực.

10

Đây là những gì tôi đã học được:

MOST QUAN TRỌNG

  • mẫu HTML của bạn phải được tạo ra với sử dụng chỉ thị, không chỉ BeginForm và EndForm.
  • Bạn phải thiết lập Html.ClientValidationEnabled = true TRƯỚC KHI bạn bắt đầu 'Mẫu' của bạn
  • Bạn phải sử dụng Html.ValidationMessage cho từng lĩnh vực
  • Bạn phải thiết lập Html.ClientValidationEnabled = true vào từng kiểm soát một phần (ascx)

Cách thức hoạt động (tổng quan rất đơn giản)

  • Khi bạn làm Html.BeginForm nó tạo ra một 'FormContext' trong ViewContext
  • Khi những người giúp đỡ ValidationMessage được sử dụng, siêu dữ liệu được đưa vào dạng cảnh
  • Khi biểu mẫu được xử lý (theo báo cáo kết quả sử dụng) nó viết ra tất cả các mã xác nhận

MISC

  • tôi dường như không thể có được làm việc xác nhận khi tôi có một điều khiển một phần, nếu kiểm soát sử dụng một mô hình khác nhau từ quan điểm cho rằng định nghĩa mẫu.

  • Bạn không cần phải sử dụng Html.TextBoxFor hoặc Html.ValidationMessageFor, bạn có thể sử dụng Html.TextBox và Html.ValidationMessage

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