1. View
- Tại vị trí muốn chèn link để người dùng nhấn sort
<th>
@{
var sortBy = Context.Request.Query["sortby"] == "name" ? "namedesc" : "name";
}
<a href="@Url.Action("Index","Customer",new {sortBy=sortBy,SearchString=@Context.Request.Query["SearchString"]})">
@Html.DisplayNameFor(model => model.TenKhachHang)
</a>
</th>
- Ý nghĩa:
+ var sortBy: gán giá trị truy vấn từ URL với khoá là sortby, kiểm tra sortby có bằng "name" không, nếu bằng thì chuyển "namedesc"
+ Cái link, thể hiện gán biến sortBy dành QueryString.
- Mục đích: Giảm dần, tăng dần
- Tương tự có thể làm cho các trường dữ liệu khác
- Thay thế phân trang, dòng dưới cùng, chèn thêm thuộc tính sort
@Html.PagedListPager((IPagedList) Model, page => Url.Action("Index", new {page = page,
SearchString = @Context.Request.Query["SearchString"],sortby = @Context.Request.Query["sortby"]}),
new X.PagedList.Web.Common.PagedListRenderOptions {
LiElementClasses = new string[] {"page-item"},
PageClasses = new string[] { "page-link" }
})
2. Controller
- Sửa lại Action Index hiện tại:
[HttpGet]
public ActionResult Index(string searchString, int? page, string sortBy)
{
var khachHangList = khachHangRepository.GetKhachHangs(sortBy).ToPagedList(page ?? 1, 5);
if (!string.IsNullOrEmpty(searchString))
{
searchString = searchString.ToLower();
khachHangList = khachHangRepository.GetKhachHangByName(searchString, sortBy).ToPagedList(page ?? 1, 5);
}
//TempData["searchString"] = searchString;
return View(khachHangList);
}
3. Repository
- IKhachHangRepository
IEnumerable<KhachHang> GetKhachHangs(string sortBy);
IEnumerable<KhachHang> GetKhachHangByName(string name,string sortBy);
- KhachHangRepository
public IEnumerable<KhachHang> GetKhachHangs(string sortBy) => KhachHangDao.Instance.GetKhachHangList(sortBy);
public IEnumerable<KhachHang> GetKhachHangByName(string name, string sortBy) => KhachHangDao.Instance.GetKhachHangBySearchName(name, sortBy);
4. Dao
- Sửa lại các hàm sau
public IEnumerable<KhachHang> GetKhachHangList(string sortBy)
{
using var context = new MyStockContext();
List<KhachHang> model = context.KhachHangs.ToList();
try
{
switch (sortBy)
{
case "name":
model = model.OrderBy(o => o.TenKhachHang).ToList();
break;
case "namedesc":
model = model.OrderByDescending(o => o.TenKhachHang).ToList();
break;
default:
break;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return model;
}
public IEnumerable<KhachHang> GetKhachHangBySearchName(string name, string sortBy)
{
var context = new MyStockContext();
/*var khachHangs = new List<KhachHang>();*/
List<KhachHang> model = context.KhachHangs.ToList();
try
{
if (!String.IsNullOrEmpty(name))
{
model = model.Where(x => x.TenKhachHang.ToLower().Contains(name)).ToList();
switch (sortBy)
{
case "name":
model = model.OrderBy(o => o.TenKhachHang).ToList();
break;
case "namedesc":
model = model.OrderByDescending(o => o.TenKhachHang).ToList();
break;
default:
break;
}
}
else
{
return model;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return model;
}