Asp.net mvc 3 从ASP'获取JSonResult;s Ajax.ActionLink
如何使用Ajax.ActionLink从控制器方法中获取JSON?我试着搜索这个网站,但我得到的最接近的东西是Asp.net mvc 3 从ASP'获取JSonResult;s Ajax.ActionLink,asp.net-mvc-3,asp.net-ajax,Asp.net Mvc 3,Asp.net Ajax,如何使用Ajax.ActionLink从控制器方法中获取JSON?我试着搜索这个网站,但我得到的最接近的东西是 “最佳答案”实际上并没有告诉您如何从ajax.actionlink中的SomeActionMethod获取JSON。就个人而言,我不喜欢ajax.助手。在ASP.NET MVC
“最佳答案”实际上并没有告诉您如何从ajax.actionlink中的SomeActionMethod获取JSON。就个人而言,我不喜欢
ajax.
助手。在ASP.NET MVC<3中,它们用javascript污染我的HTML,在ASP.NET MVC 3中,它们用HTML 5data-*
属性污染我的HTML,这些属性是完全冗余的(例如锚的url)。此外,它们不会自动解析成功回调中的JSON对象,这正是您的问题所在
我使用普通的Html.*
helpers,如下所示:
@Html.ActionLink(
"click me", // linkText
"SomeAction", // action
"SomeController", // controller
null, // routeValues
new { id = "mylink" } // htmlAttributes
)
这显然会生成正常的HTML:
假设控制器执行以下操作:
[HttpPost]
public ActionResult SomeAction()
{
return Json(new { someProperty = "Hello World" });
}
更新: 根据评论部分的要求,这里介绍了如何使用
Ajax.
助手(我再次重复,这只是一个如何实现这一点的示例,绝对不是我推荐的,请参阅我推荐的解决方案的初始答案):
在成功回调中:
function success(data) {
var json = $.parseJSON(data.responseText);
alert(json.someProperty);
}
但是,有没有一种方法可以使用Ajax.*帮助器来实现这一点?拥有这些数据属性(因为我使用的是MVC 3)有什么真正的缺点吗?@user558594,是的,有一种方法。您可以在
AjaxOptions
中指定一个OnSuccess
回调。在这个回调中,您可以解析JSON:函数success(data){var JSON=$.parseJSON(data.responseText);}
。请看我更新的答案。是的,但是如果在MVC3中这样做,到底有什么坏处呢?冗余数据-属性不会显著增加用户将下载到浏览器中的文件大小。@user558594,正是这种冗余困扰着我。当你这样做一两次是好的,但当它成为一种习惯,你在你所有的锚和形式上这样做,事情就会变得丑陋。除此之外,您还看到了如何使用$在成功回调中手动解析JSON。parseJSON
?那真是糟透了。更不用说,与使用标准jQuery方法相比,您对实际AJAX请求的控制要少得多。我刚刚尝试了您的示例(在将控制器和操作修改为我已经创建的控制器和操作之后)。在我缩小的jQuery文件中,它表示回调上下文未定义。但这很恼火,因为我可以看到JSON被返回。当您单击链接时,它实际上会提示您将JSON下载到一个平面文件中。
[HttpPost]
public ActionResult SomeAction()
{
return Json(new { someProperty = "Hello World" });
}
@Ajax.ActionLink(
"click me",
"SomeAction",
"SomeController",
new AjaxOptions {
HttpMethod = "POST",
OnSuccess = "success"
}
)
function success(data) {
var json = $.parseJSON(data.responseText);
alert(json.someProperty);
}