ASP.NET MVC Ajax.ActionLink и Json ответ [object Object]
Вчера начал изучать asp.net ajax + использование его с asp.net mvc.
Столкнулся с очень неприятной проблемой... игрался с ней очень долго, гугл не очень помог (что очн странно))) ). По-этому если эта ошибка ламера, прошу не бить))), но вдруг кто-то столкнется с такой же проблемой, то надеюсь не потратит столько же времени как я.
Суть проблемы:
Создаем линк, который будет отправлять POST запрос к action методу HelloWorld и по заверешении выполнения, вызывать на клиентсокой стороне метод OnSuccess, который будет показывать всплывающее окно с возвращеным результатом от контроллера:
function onSuccess(result) { alert("Controller return: " + result.Message); } <%= Ajax.ActionLink("show alert", "HelloWorld", new AjaxOptions { HttpMethod = "POST", OnSuccess = "onSuccess" })%>
и собственно сам метод контроллера:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult HelloWorld() { return Json(new { Message = "Hello world!!!" }); }
Во всех примерах что находил в книгах и в интернете - код был именно такой.
но когда нажимаешь на ссылку - всплывающие окно содержит текст: Controller return: Undefined
решил проверить или возвращается правельный обьект:
function onSuccess(result) { alert("Controller return: " + result); }
но получил в ответ: Controller return: [object Object]
Очень долго я бился над этой проблемой... но ответ найти было гараздно проще чем искать в гугле... нужно было посмотреть исходники файла MicrosoftMvcAjax.debug.js ))))
там я увидел, что в ф-цию передаеся не сам ответа от контроллера... а полностью весь ajax ответа)))
чтобы получить ответ из метода HelloWorld нужно сделать вот что:
1. для MVC v1.0
function onSuccess(result) { var response = result.get_response(); var data = response.get_object(); alert("Controller return: " + data.Message); }
2. для MVC v2.0
разработчики в этой версии уже упростили процес получения данных:
function onSuccess(result) { var data = result.get_object(); alert("Controller return: " + data.Message); }
теперь текст во всплывающем окне: Controller return: Hello World!!!
WBR,
Bobasoft