Bài viết này hướng dẫn bạn tạo chức năng AutoComplete (gợi ý từ khóa search) trên textbox trong ASP.NET MVC 5 bằng cách dùng thư viện jQuery UI.
Hình minh họa |
Ở hướng dẫn này mình demo bằng cách gợi ý danh sách thành phố (City) khi người dùng nhập tên thành phố vào ô textbox. Bạn làm tương tự với dữ liệu khác nhé.
Bắt đầu nào ^^
Bước 1: Tạo 1 project MVC Application và đặt tên là AutoCompleteInMVCJson.
Bước 2: Tạo class City.cs trong thư mục Models, nội dung như sau:
- public class City
- {
- public int Id { get; set; }
- public string Name { get; set; }
- }
- using System.Collections.Generic;
- using System.Linq;
- using System.Web.Mvc;
- using AutoCompleteInMVCJson.Models;
- namespace AutoCompleteInMVCJson.Controllers
- {
- public class HomeController : Controller
- {
- // GET: Home
- [HttpGet]
- public ActionResult Index()
- {
- return View();
- }
- [HttpPost]
- public JsonResult AutoCompleteCity(string Prefix)
- {
- //Note : you can bind same list from database
- List<City> ObjList = new List<City>()
- {
- new City {Id=1,Name="Latur" },
- new City {Id=2,Name="Mumbai" },
- new City {Id=3,Name="Pune" },
- new City {Id=4,Name="Delhi" },
- new City {Id=5,Name="Dehradun" },
- new City {Id=6,Name="Noida" },
- new City {Id=7,Name="New Delhi" }
- };
- //Searching records from list using LINQ query
- var CityName = (from N in ObjList
- where N.Name.StartsWith(Prefix)
- select new { N.Name });
- return Json(CityName, JsonRequestBehavior.AllowGet);
- }
- }
- }
Đoạn lệnh trong action AutoCompleteCity thực hiện lấy danh sách City có Name bắt đầu bằng chuỗi Prefix lấy ra từ tham số. Giá trị của chuỗi Prefix chính là chuỗi người dùng nhập ở textbox.
Sau khi lọc các City thỏa điều kiện thì chúng ta gán qua biến CityName là 1 danh sách các Name của các City thỏa điều kiện. Cuối cùng là trả về kết quả dưới dạng Json.
Lưu ý: tên tham số phải là Prefix, điều này là bắt buộc bạn không được đặt tên khác.
Bước 4: Khai báo thư viện jQuery và jQuery UI trong view _Layout.cshtml của bạn như dưới
- <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
- <script src="//code.jquery.com/jquery-1.10.2.js"></script>
- <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
Bước 5: Đặt ID của textbox của bạn 1 tên bất kỳ. Ở bài viết này mình đặt là CityName.
<input type="textbox" name="CityName" id="CityName" />
Bước 6: Dán đoạn lệnh sau vào dưới lệnh khai báo ở bước 4
- <script type="text/javascript">
- $(document).ready(function () {
- $("#CityName").autocomplete({
- source: function (request, response) {
- $.ajax({
- url: "/Home/AutoCompleteCity",
- type: "POST",
- dataType: "json",
- data: { Prefix: request.term },
- success: function (data) {
- response($.map(data, function (item) {
- return { label: item.Name, value: item.Name };
- }))
- }
- })
- },
- messages: {
- noResults: "", results: ""
- }
- });
- })
- </script>