Метод действия URL-адреса jqGrid и MVC3 не вызывается - PullRequest
0 голосов
/ 20 февраля 2012

Я не могу заставить jqGrid вызывать мой метод действия на моем контроллере. Я совершенно новичок в этом, поэтому я, вероятно, делаю много ошибок новичка. Я взял образец кода из документации jqGrids и немного его изменил.

Код в виде:

    $(function () {
    $("#list").jqGrid({
        url: '@Url.Action("GetContactRows", "Contact")',
        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'
    });
}); 

Код в контроллере:

    public JsonResult GetContactRows(string sidx, string sord, int page, int rows, bool search, string filters)
    {
        System.Diagnostics.Debug.WriteLine("asdf");

        return new JsonResult();
    }

Я установил точку останова в методе действия моего контроллера, но я просто не могу заставить его ударить.

1 Ответ

3 голосов
/ 20 февраля 2012

Параметр должен называться _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 и посмотрите точные параметры, отправленные клиентом:

enter image description here

Видите ли вы, как легко заниматься веб-разработкой, когда вы используете правильные инструменты? 70 секунд Это быстрее, чем задавать вопрос по StackOverflow.

</rant>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...