Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 从ASP'获取JSonResult;s Ajax.ActionLink_Asp.net Mvc 3_Asp.net Ajax - Fatal编程技术网

Asp.net mvc 3 从ASP'获取JSonResult;s Ajax.ActionLink

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从控制器方法中获取JSON?我试着搜索这个网站,但我得到的最接近的东西是


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

就个人而言,我不喜欢
ajax.
助手。在ASP.NET MVC<3中,它们用javascript污染我的HTML,在ASP.NET MVC 3中,它们用HTML 5
data-*
属性污染我的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);
}