Получение JSonResult от Ajax.ActionLink в ASP - PullRequest
6 голосов
/ 08 июля 2011

Как мне получить JSON из метода контроллера, использующего Ajax.ActionLink?Я попытался выполнить поиск по сайту, но самое близкое, что я получил, было Действия контроллера ASP.NET MVC, которые возвращают JSON или частичный html

И «лучший ответ» на самом деле не говорит вам, какполучить JSON из SomeActionMethod в ссылке ajax.action.

1 Ответ

13 голосов
/ 08 июля 2011

Лично мне не нравятся Ajax.* помощники.В ASP.NET MVC <3 они загрязняют мой HTML с помощью javascript, а в ASP.NET MVC 3 они загрязняют мой HTML с помощью атрибутов HTML 5 <code>data-*, которые являются полностью избыточными (например, URL-адрес привязки).Также они не анализируют автоматически JSON-объекты в обратных вызовах успеха, о чем ваш вопрос.

Я использую обычные Html.* помощники, например:

@Html.ActionLink(
    "click me",           // linkText
    "SomeAction",         // action
    "SomeController",     // controller
    null,                 // routeValues
    new { id = "mylink" } // htmlAttributes
)

, что, очевидно,создать обычный HTML:

<a href="/SomeController/SomeAction" id="mylink">click me</a>

и который я ненавязчиво AJAXify в отдельных файлах JavaScript:

$(function() {
    $('#mylink').click(function() {
        $.post(this.href, function(json) {
            // TODO: Do something with the JSON object 
            // returned the your controller action
            alert(json.someProperty);
        });
        return false;
    });
});

Предполагая следующее действие контроллера:

[HttpPost]
public ActionResult SomeAction()
{
    return Json(new { someProperty = "Hello World" });
}

ОБНОВЛЕНИЕ:

Как и просили в разделе комментариев, вот как это сделать с помощью помощников Ajax.* (повторяю еще раз, это всего лишь иллюстрация того, как этого можно достичь, и абсолютно нечто-то, что я рекомендую, см. мой первоначальный ответ для моего рекомендуемого решения):

@Ajax.ActionLink(
    "click me", 
    "SomeAction",
    "SomeController",
    new AjaxOptions { 
        HttpMethod = "POST", 
        OnSuccess = "success" 
    }
)

и внутри обратного вызова успеха:

function success(data) {
    var json = $.parseJSON(data.responseText);
    alert(json.someProperty);
}
...