【发布时间】:2014-11-02 12:06:59
【问题描述】:
我想在我的 ASP.NET MVC 5 项目中使用 jQuery DataTables。
我确实使用了数据表并且它工作得非常好,但问题是我必须手动设置过滤器和查询,我感觉我试图在 mvc 中实现数据表的方式不太正确。 是的,我确实得到了结果,但我想遵循和标准,而且我想要一些我不必一次又一次地输入过滤器和分页代码的东西,我只需将参数发送到某个函数或类,我就会得到结果。
这就是为什么我试图寻找一些具有适当文档的数据表库。
当我遇到这个图书馆时。
https://github.com/ALMMa/datatables.mvc
但是没有好的文档可以让我理解该库中真正发生的事情或如何使用该库?
是的,我尝试了那个库,但是由于缺乏 c# 和 asp.net 的知识,我不明白如何实现它,而且我找不到与这个库相关的任何示例,我可以理解这个库的工作原理。 .
但是我也偶然发现了这个记录良好的过程。
http://www.codeproject.com/Articles/155422/jQuery-DataTables-and-ASP-NET-MVC-Integration-Part
效果很好,因为他们对如何实施提供了非常详细的说明。
我的控制器代码是这样的。
public ActionResult Index(jQueryDataTableParamModel param = null)
{
if (Request.IsAjaxRequest() && param != null)
{
var allCategories = _db.Categories.ToList();
IEnumerable<Category> categories;
var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);
var sortDirection = Request["sSortDir_0"]; // asc or desc
Func<Category,string> orderingFunction = (c => sortColumnIndex==1? c.Name :
sortColumnIndex==2? c.SortOrder.ToString(): c.Status.ToString());
if (!string.IsNullOrEmpty(param.sSearch))
{
if(sortDirection == "desc"){
categories = (from category in allCategories
where category.Name.ToLower().Contains(param.sSearch.ToLower())
select category).OrderByDescending(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength);
}
else
{
categories = (from category in allCategories
where category.Name.ToLower().Contains(param.sSearch.ToLower())
select category).OrderBy(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength);
}
}
else
{
if (sortDirection == "desc") {
categories = (from category in allCategories
select category).OrderByDescending(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength);
}
else{
categories = (from category in allCategories
select category).OrderBy(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength);
}
}
var actionButtons = "<div class='btn-group'>"+
"<button class='btn btn-primary btn-gradient btn-sm' type='button'>"+
"<span class='fa fa-pencil'></span>"+
"</button>";
return Json(new
{
sEcho = param.sEcho,
iTotalRecords = categories.Count(),
iTotalDisplayRecords = categories.Count(),
aaData = (from category in categories
select new[] { category.CategoryID.ToString(), category.Name, category.SortOrder.ToString(), actionButtons }).ToArray()
},
JsonRequestBehavior.AllowGet);
}
return View();
}
但是正如您所见,现在只有 1 种方法中有很多代码,如果数据表有更多方法,我将不得不一次又一次地编写所有代码。所以相反,我是否有可能制作某种常见的数据表类或函数,并通过提供一些参数来调用它,我得到了想要的结果。
我在 ASP.NET MVC5 或 C# 方面没有经验,我已经有几天在 MVC 5 上工作了。所以如果有更好的方法来实现我在代码中实现的结果,请也分享一下关于数据表,您认为对我有好处的任何建议。
【问题讨论】:
-
我不明白为什么要在后端生成 html 代码,这不是 MVC 的重点。如果您需要一个 html 模板来表示您想要的一些数据,请尝试使用部分视图。
-
@MartinSolev 我可以在控制器类方法中调用局部视图吗??
-
不,控制器的重点是业务逻辑,而不是客户端逻辑。您可以获取您的数据和所有内容并将其发送到视图,在那里您可以迭代您的类别并将它们中的每一个传递到一个局部视图,该视图可以根据您的需要创建您的 html :)
标签: c# asp.net asp.net-mvc datatables jquery-datatables