JQuery параметр автозаполнения передать нулевой параметр в контроллер в ASP.NET MVC 2 - PullRequest
8 голосов
/ 25 марта 2010

Я использую плагин автозаполнения jQuery с сайта jQuery вызов URL контроллера, который возвращает взамен json. Проблема в том, что параметр, отправляемый в контроллер, всегда равен нулю.

Вот код jQuery в браузере для автозаполнения:

$(document).ready(function() {
    var url = "/Building/GetMatchedCities";
    $("#City").autocomplete(url);
});

и вот подпись контроллера ASPNET MVC в C #:

public JsonResult GetMatchedCities(string city)
{
    ..
    return this.Json(query, JsonRequestBehavior.AllowGet);
}

Заранее спасибо,

Mohammad

Ответы [ 3 ]

9 голосов
/ 30 апреля 2010

У меня была такая же проблема. Посмотрев URL-адрес, созданный JQuery в Fiddler, я обнаружил, что он выглядит так: / MyController / MyMethod? Term = x. Поэтому я изменил свою сигнатуру метода, чтобы использовать имя параметра «term» вместо «q» («q» показано в примерах автозаполнения на веб-сайте JQuery.). Это решило проблему, и я все еще смог вернуть JsonResult, который мне был нужен.

    public JsonResult MyMethod(string term) 
    {
        ...
        return Json(query, JsonRequstBehavior.AllowGet);
    }
4 голосов
/ 25 марта 2010

Попробуйте добавить данные города как extraParms:

$("#City").autocomplete(url, {
extraParams: { city: $('#City').val() }
});

Предполагается, что $ ('# City') является вводом текста типа при использовании .val

- отредактировано -

На основании ваших отзывов ответ:

Контроллер должен быть:

public JsonResult GetMatchedCities(string q)
{
    ..
    return this.Json(query, JsonRequestBehavior.AllowGet);
}

Jquery будет:

 $(document).ready(function() { 
    var url = "/Building/GetMatchedCities"; 
    $("#City").autocomplete(url); 
 });
2 голосов
/ 26 марта 2010

Когда я сделал это, я указал опцию source для автозаполнения, чтобы она была функцией, вызываемой приложением ASPNET. Это позволило мне указать URL напрямую. Для вас это было бы так:

$("#City").autocomplete({
    source: function(req, responseFn) {
        addMessage("search on: '" + req.term + "'<br/>", true);

        $.ajax({
            url     : ajaxUrlBase1 + "GetMatchedCities/" + req.term,
            cache   : false,
            type    : "GET", // http method
            success : function(msg){
                // ajax call has returned
                var result = msg;
                if (result !== null){
                  var a = [];
                  for(var i=0; i < result.length; i++) {
                    a.push({label: result[i].cityname, id: result[i].abbrev});
                  }
                  responseFn(a);
                } else {
                  responseFn(null);
                }
            }
        });
    }
});

Конечно, то, что вы делаете внутри success fn, будет зависеть от формы json, который вы возвращаете из своего действия.

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