ASP.NET MVC Ajax.ActionLink и Json ответ [object Object]

понедельник, 4 января 2010, Bobasoft

Вчера начал изучать 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


Ищите нас в интернетах!

Комментарии

Свежие вакансии