【发布时间】:2015-12-08 23:49:00
【问题描述】:
所以我已经在 MVC 中为 jQuery 数据表实现了服务器端处理,我正在显示 1 to 10 of 8,037 entries(带有分页)。但是,当我导航到带有表格的页面时,第一次加载需要很长时间(5 到 10 秒)。在我的控制器中,我将其设置为仅记录 10 条记录 (iDisplayLength):
var displayedProviders = filteredProviders
.Skip(param.iDisplayStart)
.Take(param.iDisplayLength);
因此,当我第一次导航到包含表格的页面或使用分页时,它一次只能加载 10 条记录。
谁能指导我为什么第一次加载需要这么长时间?我担心它将整个表加载到 Json 请求中,这首先会减慢速度。这不是我在实现服务器端处理时想到的。有没有解决的办法?如果我实施:
var model = _db.CareProviders
.OrderBy(row => row.ProviderId).Skip((pageNumber - 1) * pageResults)
.Take(pageResults).ToList();
这只会显示 10 个结果而不会更多?
型号:
public class jQueryDataTableParamModel
{
/// <summary>
/// Request sequence number sent by DataTable,
/// same value must be returned in response
/// </summary>
public string sEcho { get; set; }
/// <summary>
/// Text used for filtering
/// </summary>
public string sSearch { get; set; }
/// <summary>
/// Number of records that should be shown in table
/// </summary>
public int iDisplayLength { get; set; }
/// <summary>
/// First record that should be shown(used for paging)
/// </summary>
public int iDisplayStart { get; set; }
/// <summary>
/// Number of columns in table
/// </summary>
public int iColumns { get; set; }
/// <summary>
/// Number of columns that are used in sorting
/// </summary>
public int iSortingCols { get; set; }
/// <summary>
/// Comma separated list of column names
/// </summary>
public string sColumns { get; set; }
}
}
控制器:
public ActionResult AjaxHandler(jQueryDataTableParamModel param)
{
var allProviders = _db.CareProviders.ToList();
IEnumerable<CareProvider> filteredProviders;
if (!string.IsNullOrEmpty(param.sSearch))
{
filteredProviders = _db.CareProviders.ToList()
.Where(c => c.ProviderId.Contains(param.sSearch)
||
c.CareServiceType.Contains(param.sSearch)
||
c.CareServiceName.Contains(param.sSearch));
}
else
{
filteredProviders = allProviders;
}
var displayedProviders = filteredProviders
.Skip(param.iDisplayStart)
.Take(param.iDisplayLength);
var result = from c in displayedProviders
select new[] { Convert.ToString(c.ProviderId), c.CareServiceType, c.CareServiceName, c.Email };
return Json(new
{
sEcho = param.sEcho,
iTotalRecords = allProviders.Count(),
iTotalDisplayRecords = filteredProviders.Count(),
aaData = result
},
JsonRequestBehavior.AllowGet);
}
Jquery DataTable 脚本:
<script type="text/javascript">
$(function () {
// Initialize Example 2
// $('#example2').dataTable();
$('#example2').dataTable({
"bServerSide": true,
"sAjaxSource": "AdminPanel/AjaxHandler",
"bProcessing": true,
"aoColumns": [
{ "sName": "ProviderId" },
{ "sName": "CareServiceType" },
{ "sName": "CareServiceName" },
{ "sName": "Email" }
]
});
});
</script>
【问题讨论】:
标签: c# jquery asp.net-mvc linq datatable