Параметр должен называться _search
, а не search
. Также вы, похоже, не передаете никаких данных JSON. Вот пример:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult GetContactRows(string sidx, string sord, int page, int rows, bool _search, string filters)
{
var data = new
{
page = 1,
total = 1,
records = 3,
rows = new[]
{
new
{
id = 1,
cell = new[] { "Name 1", "Address 1", "City 1" },
},
new
{
id = 2,
cell = new[] { "Name 2", "Address 2", "City 2" },
},
new
{
id = 3,
cell = new[] { "Name 3", "Address 3", "City 3" },
}
}
};
return Json(data, JsonRequestBehavior.AllowGet);
}
}
Обратите внимание на сигнатуру действия, используя _search
в качестве имени параметра, а также обратите внимание, что мы разрешаем GET-запросы, используя JsonRequestBehavior.AllowGet
при возврате JSON.
и вид:
<script src="@Url.Content("~/Scripts/jqgrid/js/jquery.jqGrid.min.js")" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("#list").jqGrid({
url: '@Url.Action("GetContactRows", "Home")',
datatype: 'json',
mtype: 'GET',
colNames: ['Name', 'Address', 'City'],
colModel: [
{ name: 'Name', index: 'Name', width: 80 },
{ name: 'Address', index: 'Address', width: 80 },
{ name: 'City', index: 'City', width: 80 }
],
pager: '#pager',
rowNum: 10,
rowList: [10, 20, 30],
sortname: 'invid',
sortorder: 'desc',
viewrecords: true,
gridview: true,
caption: 'List of Contacts'
});
});
</script>
<table id="list"></table>
<rant>
Также, чтобы можно было легко отлаживать подобные проблемы, используйте инструмент отладки javascript, такой как FireBug. Это позволяет вам видеть все запросы AJAX в вашем браузере, а также то, что сервер отправляет в ответ. Если бы вы сделали это, вы бы сразу увидели эту ошибку.
Мне потребовалось ровно 70 секунд, чтобы зайти на веб-сайт jqGrid, загрузить его, создать новое приложение ASP.NET MVC 3, скопировать и вставить свой код, сослаться на ранее загруженную jqGrid, нажать F5, чтобы запустить приложение, нажмите F12 в FireFox, чтобы открыть FireBug, увидите, что AJAX-запрос, который jqGrid пытался выполнить, был показан красным (потому что сервер вернул код состояния HTTP 500), щелкните значок + рядом с этим AJAX-запросом и прочитайте точное исключение. сообщение, отправленное сервером, сообщающее, что он не может найти значение для параметра search
, который не является логическим значением, допускающим использование значения NULL, щелкните вкладку Params
и посмотрите точные параметры, отправленные клиентом:
Видите ли вы, как легко заниматься веб-разработкой, когда вы используете правильные инструменты? 70 секунд Это быстрее, чем задавать вопрос по StackOverflow.
</rant>