关于asp.net mvc 3:从ASP的Ajax.ActionLink获取JSonResult

Getting JSonResult from ASP's Ajax.ActionLink

如何使用Ajax.ActionLink从控制器方法实际获取JSON? 我尝试搜索网站,但最接近的是ASP.NET MVC控制器操作返回JSON或部分html

并且"最佳答案"实际上并没有告诉您如何从ajax.actionlink中的SomeActionMethod获取JSON。


我个人不喜欢Ajax.*助手。 在ASP.NET MVC <3中,他们使用javascript污染我的HTML,在ASP.NET MVC 3中,他们使用完全冗余的HTML 5 data-*属性污染我的HTML(例如锚点的url)。 此外,它们不会自动解析成功回调中的JSON对象,这就是您的问题所在。

我使用普通的Html.*助手,像这样:

1
2
3
4
5
6
7
@Html.ActionLink(
   "click me",           // linkText
   "SomeAction",         // action
   "SomeController",     // controller
    null,                 // routeValues
    new { id ="mylink" } // htmlAttributes
)

这显然会产生正常的HTML:

1
click me

我在不同的javascript文件中不引人注意地使用AJAXify:

1
2
3
4
5
6
7
8
9
10
$(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;
    });
});

假设以下控制器操作:

1
2
3
4
5
[HttpPost]
public ActionResult SomeAction()
{
    return Json(new { someProperty ="Hello World" });
}

更新:

根据评论部分的要求,这里是如何使用Ajax.*助手进行的(我再次重复一遍,这只是说明如何实现这一点,绝对不是我推荐的东西,请参阅我推荐的解决方案的初步答案):

1
2
3
4
5
6
7
8
9
@Ajax.ActionLink(
   "click me",
   "SomeAction",
   "SomeController",
    new AjaxOptions {
        HttpMethod ="POST",
        OnSuccess ="success"
    }
)

并在成功回调中:

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