jquery getJson не передает значения контроллеру - PullRequest
7 голосов
/ 11 февраля 2009

Я пытаюсь передать некоторый текст из текстового поля в контроллер, чтобы получить результаты JSON, например, так:

function invokeAction() {
        var searchText = $("#SearchTextBox").val();

        // Invoke MVC controller action
        $.getJSON("/Home/Results/" + searchText, bindResults);
    }

Если я поставлю здесь предупреждение, я вижу, что searchText определенно имеет значение, но когда я ставлю точку останова на это действие контроллера:

 public ActionResult Results(string search)
    {
        var r = from t in db.Restaurants
                where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%")
                orderby t.Name ascending
                orderby t.Rating descending
                orderby t.NumOfViews
                    descending
                select t;

        return Json(r.ToList());
    }

Переданная строка имеет значение null, но когда я проверяю http-контекст в отладчике, мой searchtext является частью URL-адреса.

Поскольку это значение равно нулю, запрос не возвращает результатов.

Я что-то здесь упускаю?

Ответы [ 2 ]

9 голосов
/ 11 февраля 2009

У меня были некоторые проблемы с возвратом json из сервисов, и мне не звонили. оказалось, что json был искажен, и я смог проверить это и получить эти ошибки, обработав опцию error простого вызова ajax.

$.ajax({
  type: "GET",
  url: "Home/Results/",
  data: { search: searchText },
  dataType: "json",
  error: function(xhr, status, error) {
    // you may need to handle me if the json is invalid
    // this is the ajax object
  },
  success: function(json){
    alert( "Data Returned: " + json);
  }
});
3 голосов
/ 11 февраля 2009

Вам придется исправить свой маршрут и заменить {id} на {search}, чтобы привязать его к правильному параметру - попробуйте что-то вроде этого:

routes.MapRoute("search", "Home/Results/{search}", 
  new { controller = "Home", action = "Results" });

Если вы не хотите этого делать, вы можете сделать это следующим образом, указав имя параметра в качестве стандартного параметра строки запроса

$.getJSON("/Home/Results?search=" + searchText,bindresults);

исправит привязку.

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