Asp.net ajax с mvc2 - PullRequest
       3

Asp.net ajax с mvc2

2 голосов
/ 25 июня 2011

Я вызываю метод ajax, как показано ниже

 var srchText = "Chicago";


 $.ajax({
    url: "/Ajax/GetCities",
    data: "{'srchText' : '" + srchText + "'}",
    dataType: "json",
    type: "POST",
    async: false,
    contentType: "application/json; charset=utf-8",
    dataFilter: function (data) { return data; },
    success: function (data) {
        cityList = data.d;
    }
});

URL-адрес указывает на контроллер MVC, как показано ниже,

 [HttpPost]
    public ActionResult GetCities(string srchText)
    {
        List<City> result = new List<City>();
        EventsBIZ objBIZ = new EventsBIZ();
        result = objBIZ.ToList<City>(objBIZ.GetCities(srchText));
        return this.Json(new GetEventsResponse() { d = result }, JsonRequestBehavior.AllowGet);
    }

Что-то не так с кодом, чтометод вызывается успешно, но srchText имеет значение null.Пожалуйста, помогите мне понять, что Ват пошел не так.Заранее спасибо

Добавление запроса отслеживается с firebug.FireBug Net monitor

Ответы [ 3 ]

4 голосов
/ 25 июня 2011

Причина, по которой ваш код не работает, заключается в том, что по умолчанию ASP.NET MVC 2 не понимает JSON запросов. Нет ничего встроенного, что позволяет отправлять запрос в формате JSON и что этот запрос анализируется обратно в строго типизированный аргумент действия. Эта функция встроена по умолчанию, начиная с ASP.NET MVC 3. Взгляните на следующую запись в блоге . Вам нужно будет реализовать JsonValueProviderFactory, если вы хотите, чтобы эта работа выполнялась в ASP.NET MVC 2.

Также вместо:

data: "{'srchText' : '" + srchText + "'}",

вы должны использовать:

data: JSON.stringify({ srchText: srchText }),

JSON.stringify является родным для современных браузеров, а для более старых вам может потребоваться включить json2.js.

Другая возможность, если вы не хотите реализовывать JsonValueProviderFactory, - это использовать стандартный запрос application/x-www-form-urlencoded, который может понять механизм связывания модели по умолчанию:

$.ajax({
    url: '/Ajax/GetCities',
    data: { srchText: srchText },
    type: 'POST',
    async: false,
    dataType: 'json',
    dataFilter: function (data) { return data; },
    success: function (data) {
        cityList = data.d;
    }
});
1 голос
/ 25 июня 2011

вам не нужно отправлять srchText как json, потому что вы просто отправите строку, чтобы можно было отправить ее как строку запроса

Попробуйте это

 var srchText = "Chicago";


$.ajax({
url: "/Ajax/GetCities",
data: 'srchText=' + srchText ,
type: "POST",
async: false,
dataFilter: function (data) { return data; },
success: function (data) {
    cityList = data.d;
}
});
0 голосов
/ 25 июня 2011

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

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