Добавьте эту модель в обозреватель решений.
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 int iPage { get; set; }
}
}
Приведенный ниже код предназначен для контроллера, и это код для полной функциональности dataTable, которая включает в себя поиск, сортировку, разбиение на страницы и т. Д.
[HttpPost]
public ActionResult LoadData(JQueryDataTableParamModel param)
{
ActionResult response = null;
try
{
var verifyList = _repository.GetList();
var displayRecordCount = 0; //for passing displayed records count(if search is true pass the filtered record count, else pass the entire list count
IEnumerable<Sp_getdata_Result> filteredVerifyList = null; //used to hold the filtered data of taskList
if (!string.IsNullOrEmpty(param.sSearch))
{
string searchText = param.sSearch.ToLower();
filteredVerifyList = _repository.GetList()
.Where(c => ((c.username!= null) && c.username.ToLower().Contains(searchText) ||
(c.countryname != null) && c.countryname .ToLower().Contains(searchText)));
if (filteredVerifyList.Count() > 0)
{
displayRecordCount = filteredVerifyList.Count();
}
else
{
displayRecordCount = 0;
}
}
else
{
filteredVerifyList = verifyList;
displayRecordCount = verifyList.Count();
}
int sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]); //Gets the SortColumnIndex from the DataTable on User Interaction
Func<Sp_getdata_Result, string> orderingFunction = (c => sortColumnIndex == 2 ? Convert.ToString(c.StudentId) :
Convert.ToString(c.FirstName)
); //Sorts the List based on supplied sortColumn index
string sortDirection = Request["sSortDir_0"]; // asc or desc
if (sortDirection == "asc")
filteredVerifyList = filteredVerifyList.OrderBy(orderingFunction); //Sort the List in ascending Order and Re assigns to the List
else
filteredVerifyList = filteredVerifyList.OrderByDescending(orderingFunction); //Sort the List in descending Order and Re assigns to the List
if (string.IsNullOrEmpty(param.sSearch)) //If search is null then display the records as seleted in 'records per page' DropDown
{
if (param.iDisplayLength != -1)
{
filteredVerifyList = filteredVerifyList.Skip(param.iDisplayStart)//skip to start Record in the List which will be supplied as param.iDisplayStart
.Take(param.iDisplayLength); //Gets up to param.iDisplayLength from param.iDisplayStart record
}
}
var displayedTaskList = filteredVerifyList; // filteredVerifyList;
var result = from Alert in displayedTaskList
select new[] {
Convert.ToString(Alert.userid),
Convert.ToString(Alert.username),
Convert.ToString(Alert.employeeid),
Convert.ToString(Alert.emailid),
Convert.ToString(Alert.gender),
Convert.ToString(Alert.countrynam)
};
response = Json(new
{
result= "Success",
sEcho = param.sEcho,
iTotalRecords = verifyList.Count(),
iTotalDisplayRecords = displayRecordCount,
aaData = result
}, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
throw ex;
}
return response;
}
Здесь мне нужно выяснить двавещи.
1. _repository
- это ничто иное, как если бы вы использовали Data Repository Pattern
, тогда это была его ссылка. Если вы не используете шаблон репозитория, вам нужно вставить ссылку на таблицу и вызвать каждый параметр поля вашей таблицы с этой ссылкой.
GetList()
- мой метод репозитория. С тех пор, как я не знаю имя вашего репозитория, я только что разместил свое. Вместо моего вы можете разместить свои.
С вашим скриптом jquery все было в порядке, но нужно добавить еще несколько строк:
"aLengthMenu": [
[5, 10, 25, 50, -1],
[5, 10, 25, 50, "All"]
],
"bAutoWidth": true,
"bScrollCollapse": true,
"iDisplayLength": 5,
"pagingType": "simple_numbers",
"sDom": 'fl<t>ip',
"bJQueryUI": false,
"sPaginationType": "bootstrap",
"oLanguage": {
"sLengthMenu": "_MENU_ records per page",
"oPaginate": {
"sPrevious": "Prev",
"sNext": "Next"
},
},
"bServerSide": true,
"sAjaxSource": "LoadData",
"bProcessing": true,