从ASP的Ajax.ActionLink获取JSonResult

17 浏览
0 Comments

从ASP的Ajax.ActionLink获取JSonResult

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

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

admin 更改状态以发布 2023年5月22日
0
0 Comments

个人而言,我不喜欢Ajax.*辅助工具。在 ASP.NET MVC < 3中,它们会用javascript来污染我的HTML,而在 ASP.NET MVC 3中,它们会用HTML5 data-*属性来污染我的HTML,这些属性是完全冗余的(比如锚点的URL)。此外,它们不会自动解析成功回调中的JSON对象,这正是你的问题所在。\n\n我使用普通的Html.*帮助程序,例如:\n\n

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

\n\n它会生成普通的HTML:\n\n

click me

\n\n我会在单独的javascript文件中使用它们,实现无干扰式的AJAX:\n\n

$(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;
    });
});

\n\n假设有以下控制器动作:\n\n

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

\n\n更新:\n\n根据评论区的要求,这是如何使用Ajax.*帮助程序实现的(我再次重申,这只是说明如何实现,绝不是我推荐的方法,请参见我最初的回答):\n\n

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

\n\n在成功回调中:\n\n

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

0