Unobtrusive Client Validation trong ASP.NET Corre
Trong bài viết này chúng ta sẽ thực hiện validation phía client sử dụng Javascript. Chúng ta đã học cách thực hiện server-side validation ở bài Model Validation. Cơ chế Unobtrusive client-side validation trong ASP.NET Core sử dụng cùng các attribute như với Model Validator.
Client-side validation
Hãy xem xét một ví dụ, khi bạn cần kiểm tra trường Name không được trống. Chúng ta dễ dàng làm với việc thêm attribute Required vào thuộc tính Name trong model.
[Required]
Public string Name {get;set;}
Model Validator sẽ thực hiện kiểm tra trên server và yêu cầu một request gửi tới server. Nó sẽ không tốt cho trải nghiệm người dùng vì phải tốn một khoảng thời gian chờ trước khi người dùng nhận thông báo lỗi từ server. Nó cũng tốn tài nguyên server cho một kiểm tra đơn giản.
Đây là trường hợp đơn giản nhất của client-side validation.
Client side validation có thể được thực hiện bằng nhiều cách:
- Sử dụng các thư viện Javascript như Jquery validation và Javascript Unobtrusive
- Sử dụng HTML 5 Validation
- Viết Javascript của bạn
Unobtrusive client-side validation
ASP.NET Core bao gồm các thư viện unobtrusive client-side validation, nó giúp dễ dàng thêm các client-side validation mà không cần viết code nhiều. Trong bài trước chúng ta sử dụng server-side validation, chúng ta cũng tìm hiểu cách sử dụng các attribute Annotation và được xử lý bởi Model Validator để kiểm tra Model. Thư viện unobtrusive client-side cũng sử dụng các attribute đó để kiểm tra các thuộc tính trên phía client. Sự khác nhau là nó sử dụng Javascript thay vì C#.
Unobtrusive (ngầm) validation sử dụng jquery.validate.unobtrusive.js. Thư viện này được xây dựng dựa trên jquery.validate.js, nó sử dụng Jquery. Vì thế chúng ta cần import tất cả nó vào view:
Cách sử dụng unobtrusive client-side validation
Load các thư viện Javascript bắt buộc
Đầu tiên chúng ta cần thêm JQuery, jquery.validate và jquery.validate.unobtrusive vào view. Các script này được thêm vào file Layout (_Layout.cshtml) định nghĩa layout của ứng dụng và sử dụng chung cho tất cả các view.
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"></script>
Thêm Validation Attribute vào thuộc tính input
Tiếp theo chúng ta cần thêm Validation Attribute vào thuộc tính model, cái này đã học trong bài trước. Các attribute này chúng ta thêm khi cài đặt server-side validation cũng được dùng luôn cho client-side validation. Trong view nhớ chỉ ra file layout sử dụng bằng cách:
@{
Layout = "_Layout";
}
Model
[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the name")]
[StringLength(maximumLength: 25, MinimumLength = 10, ErrorMessage = "Length must be between 10 to 25")]
public string Name { get; set; }
View
<form asp-controller="home" asp-action="create" method="post">
<div asp-validation-summary="ModelOnly">
<span>Please correct the following errors</span>
</div>
<label asp-for="Name"></label>
<input asp-for="Name"/>
<span asp-validation-for="Name"></span>
<br />
<input type="submit" name="submit" />
</form>
Controller
[HttpPost]
public IActionResult Create(ProductEditModel model, [FromQuery] string test)
{
string message = "";
if (ModelState.IsValid){
message = "product " + model.Name + " created successfully";
}
else {
return View(model);
}
return Content(message);
}
Chúng ta không sửa bất cứ code server nào, ngoại trừ thêm các thư viện Javascript
Chúng làm việc ra sao?
Các input tag helper tạo ra HTML như sau:
<label for="Name">Name</label>
<input type="text" data-val="true" data-val-length="Length must be between 10 to 25" data-val-length-max="25" data-val-length-min="10" data-val-required="Please enter the name" id="Name" name="Name" value="" />
<span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
<br />
Bạn có thể thấy các thuộc tính được thêm vào với ký tự bắt đầu là data-*. Các thuộc tính data-* là một phần của HTML 5 cho phép chúng ta thêm các thông tin mở rộng cho thẻ HTML.
Thư viện Javascript unobtrusive đọc các thuộc tính data-val và thực hiện kiểm tra phía client trên trình duyệt khi người dùng submit form. Các validation này hoàn thành trước khi form được gửi qua HTTP Request. Nếu có validation nào lỗi thì request sẽ không được gửi.
Click F12 và mở cửa sổ Chrome Developer console và xem tab Network. Bạn có thể thấy không có request nào được gửi khi click nút Submit với các dữ liệu không hợp lệ.
Trích nguồn từ: https://www.tektutorialshub.com/
Tags:
Bài viết liên quan
Xây dựng menu đa cấp với ASP.NET Core MVC
Cách xây dựng menu đa cấp sử dụng đệ quy trong ASP.NET Core MVC
Đọc thêm
Tìm hiểu về ABP Framework, một framework mã nguồn mở trên .NET
ABP Framework là một framework hoàn chỉnh để xây dựng ứng dụng web hiện đại bằng cách áp dụng các best practice và tiêu chuẩn trong phát triển phần mềm.
Đọc thêm
Tìm lỗi ứng dụng ASP.NET Core trên Windows Server sử dụng stdout log
Một số lỗi trong lúc khởi động hệ thống ASP.NET Core trên Windows Server mà chúng ta chưa rõ nguyên nhân tại sao ứng dụng không hoạt động. Vậy bạn có thể dùng đểns stdout để chẩn đoán lỗi.
Đọc thêmVòng đời của Dependency Injection: Transient, Singleton và Scoped
Hiểu về vòng đời của các service được tạo sử dụng Dependency Injection là rất quan trọng trước khi sử dụng chúng.
Đọc thêm
Cơ chế Dependency Injection trong ASP.NET Core
Dependency Injection giờ đã trở thành thành phần chính thức mặc định của ASP.NET Core.
Đọc thêm
Validation Tag Helper trong ASP.NET Core
ASP.NET cung cấp các tag helper liên quan đến hiển thị validation message cho người dùng.
Đọc thêm
Model Validation trong ASP.NET Core
Bài viết này chúng ta sẽ học về cơ chế Model Validation.
Đọc thêm
Cơ chế Model Binding: Truyền dữ liệu từ View lên Controller
Trong cơ chế Model Binding của ASP.NET Core chúng ta sẽ học cách làm sao để truyền dữ liệu từ View lên Controller.
Đọc thêm
Environment Tag Helper trong ASP.NET Core
Environment tag helper hỗ trợ tạo ra các nội dung phụ thuộc vào biến quy định môi trường trong ASP.NET Core.
Đọc thêm
Input Tag Helper trong ASP.NET Core
Input Tag Helper tạo ra phần tử HTML tương ứng với thuộc tính của Model là input.
Đọc thêm