Я использую плагин jQuery, jTable. Плагин имеет следующую функцию для загрузки таблицы:
$('#PersonTable').jtable('load', { CityId: 2, Name: 'Halil' });
Значения в функции загрузки отправляются как данные POST. Плагин также отправляет два параметра строки запроса (jtStartIndex, jtPageSize) через URL-адрес для разбиения таблицы на страницы.
Пример в документации показывает функцию того, как справиться с этим в ASP.NET MVC, но не в веб-API. Пример < / а>:
[HttpPost]
public JsonResult StudentListByFiter(string name = "", int cityId = 0, int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
{
try
{
//Get data from database
var studentCount = _repository.StudentRepository.GetStudentCountByFilter(name, cityId);
var students = _repository.StudentRepository.GetStudentsByFilter(name, cityId, jtStartIndex, jtPageSize, jtSorting);
//Return result to jTable
return Json(new { Result = "OK", Records = students, TotalRecordCount = studentCount });
}
catch (Exception ex)
{
return Json(new { Result = "ERROR", Message = ex.Message });
}
}
Как сейчас выглядит моя функция: она работает нормально, за исключением того, что мне не удается прочитать данные POST (параметр имени):
public dynamic ProductsList(string name = "", int jtStartIndex = 0, int jtPageSize = 0 )
{
try
{
int count = db.Products.Count();
var products = from a in db.Products where a.ProductName.Contains(name) select a;
List<Product> prods = products.OrderBy(x => x.ProductID).ToList();
return (new { Result = "OK", Records = prods, TotalRecordCount = count });
}
catch (Exception ex)
{
return (new { Result = "ERROR", Message = ex.Message });
}
}
Моя загрузка jTable: (это вызывается, когда пользователь вводит текст во вход)
$('#ProductTable').jtable('load', {
name: $('#prodFilter').val()
});
Я был бы признателен за любую помощь в том, как читать как строковые параметры в URL-адресе, так и данные POST в функции веб-API.
РЕДАКТИРОВАТЬ: Я использовал альтернативный способ отправки данных в API. Вместо отправки его в функции загрузки, отформатированной как JSON, я использовал функцию для listAction и отправил данные через URL-адрес (подробности см. В справке по API jTable):
listAction: function (postData, jtParams) {
return $.Deferred(function ($dfd) {
$.ajax({
url: 'http://localhost:53756/api/Product/ProductsList?jtStartIndex=' + jtParams.jtStartIndex + '&jtPageSize=' + jtParams.jtPageSize + '&name=' + $('#prodFilter').val(),
type: 'POST',
dataType: 'json',
data: postData,
success: function (data) {
$dfd.resolve(data);
},
error: function () {
$dfd.reject();
}
});
});
}
Чтобы перезагрузить таблицу на основе отфильтрованных результатов:
$('#ProductTable').jtable('load');
Вместо этого:
$('#ProductTable').jtable('load', {
name: $('#prodFilter').val()
});
jtStartIndex
/jtPageSize
? - person James   schedule 27.07.2014