Ngôn ngữ ASP.NET - Kiểm tra dữ liệu?

Kiểm tra dữ liệu là gì?

Khi xây dựng ứng dụng, chúng ta nên kiểm tra dữ liệu nhập từ người dùng để hạn chế các sai sót dữ liệu nhập nhằm đảm bảo việc thực hiện xử lý dữ liệu được chính xác theo các yêu cầu nghiệp vụ. Nếu chúng ta viết mã để kiểm tra phải mất nhiều thời gian (sử dụng JavaScript hoặc VBScript). Webform hỗ trợ các validation controls để kiểm tra dữ liệu nhập từ nguời dùng trong các sever controls , mục đích là tránh để người dùng nhập sai hoặc không được bỏ trống các thông tin quan trọng bắt buộc,…
Với phiên bản trước của ASP.Net là ASP thì để khắc phục lỗi đó chúng ta phải thực hiện viết mã JavaScript để bắt lỗi việc đó, còn với ASP.NET đã cung cấp cho ta những điều khiển kiểm tra tính hợp lệ của các điều khiển nhập liệu trên Form. Trong bài này các bạn sẽ học về những điều khiển đó và tiếp theo là sẽ học cách mở rộng những điều khiển đó theo ý muốn của chúng ta thí dụ bạn sẽ tạo một AjaxValidator để kiểm tra nhập liệu phía Client.

Có 6 điều khiển Validation trong .Net framework 3.5:
RequiredFieldValidator: Yêu cầu người sử dụng nhập giá trị vào trường chỉ định trên Form
RangeValidator: Kiểm tra giá trị nhập vào có nằm trong một khoảng nhỏ nhất và lớn nhất định trước hay không.
CompareValidator: So sánh giá trị nhập có bằng một giá trị của trường khác trên Form hay không.
RegularExpressionValidator: So sánh giá trị nhập với 1 biểu thức quy tắc nào đấy có thể là email, số điện thoại, số tài khoản ngân hàng…
CustomValidator: Bạn có thể tuỳ chỉnh đối tượng Validator theo ý của mình
ValidationSummary: cho phép hiển thị tổng hợp tất cả các lỗi trên 1 trang.

Hình 1

Như các bạn đã biết, mỗi khi PostBack về Server, trang Web luôn kiểm tra tính hợp lệ dữ liệu (nếu có yêu cầu khi thiết kế). Nếu dữ liệu không hợp lệ (bỏ trống, vi phạm miền giá trị, mật khẩu nhập lại không đúng, …), trang web sẽ không thể PostBack về Server.

 - Mỗi validation control gắn với 1 control
- Có thể tạo nhiều validation control cho cùng 1 control
- Nếu sử dụng RangeValidator, CompareValidator, hoặc RegularExpressionValidator, xác nhận sẽ thành công khi dữ liệu nhập của control là rỗng, do không có dữ liệu so sánh
- Khắc phục bằng cách thêm RequiredFieldValidator cho control

Quá trình Validation

- Khi sử dụng automatic validation, user sẽ nhận được page bình thường và chuẩn bị nhập liệu
- Phụ thuộc vào browser, lỗi có thể xuất hiện ngay khi user điền dữ liệu
+ Khi chuyển focus, xử lý script bên client!
- Khi hoàn thành, user kích vào button để submit page
- Mỗi button có thuộc tính CausesValidation có hai giá trị
+ False: sẽ bỏ qua các validation control, trang web sẽ được post back và code xử lý sự kiện sẽ chạy bình thường
+ True: ASP.NET sẽ tự động validation các control trong page. Nếu client-side validation được hỗ trợ, nó sẽ ngưng trang web khỏi việc post back
    Validation diễn ra tự động khi button với EnableValidation là true được kích hoạt
    Validation không xảy ra khi page được post back do sự kiện change hoặc user kích vào button với CausesValidation là false
- Nếu client-side validation không hỗ trợ, trang sẽ được post back và page life cycle được thực hiện!
- Khi điều này xảy ra thì phải biết và không thực hiện phần xử lý

protected void cmdOK_Click(Object sender, EventArgs e) {
// bỏ qua sự kiện khi control không được xác nhận
if (!Page.IsValid) return;
// phần xử lý bình thường nếu validation thành công!
lblMessage.Text = “Trình xử lý sự kiện Click của button thực thi!";
}

- Page.IsValid là false nếu có bất cứ VC nào fail
- Page.IsValid là true nếu tất cả VC thành công, hoặc validation không thực thi!

Các thuộc tính chung của validation control:

Thuộc tính Ý nghĩa
ControlToValidate Tên điều khiển cần kiểm tra. Đây là thuộc tính mà các bạn phải xác định khi sử dụng Validation Control.
Text Chuổi thông báo xuất hiện khi có lỗi.
ErrorMessage Chuỗi thông báo xuất hiện trong điều khiển Validation Summary. Giá trị này sẽ được hiển thị tại vị trí của điều khiển nếu chúng ta không gán giá trị cho thuộc tính Text.
Display Qui định hình thức hiển thị:
  • None: Không hiển thị thông báo lỗi (vẫn có kiểm tra dữ liệu)
  • Static: Trong trường hợp không có vi phạm dữ liệu, điều khiển không có hiển thị nhưng vẫn chiếm vị trí như trong lúc thiết kế.
  • Dynamic: Trong trường hợp không có vi phạm dữ liệu, điều khiển không chiếm dụng vị trí trên màn hình.
EnableClientScript Có cho phép thực hiện kiểm tra ở phía Client hay không ?. Giá trị mặc định là true - có kiểm tra.