我如何一起使用MVC jQuery和Ajax来返回Json对象

时间:2011-05-31 00:17:34

标签: c# asp.net asp.net-mvc-3 razor

我希望能够单击一个按钮,在我的控制器中有一个函数返回一个JSON对象,该对象可以在我的页面上使用而不需要重新加载页面。

我的控制器:

//Dont know if HttpPost is right 
[HttpPost] 
public ActionResult GetPinPoints() {
    return jsonobject;
}

我希望能够调用它并让它在AJAX页面上返回一个JSON对象,所以我不必重新加载页面。

3 个答案:

答案 0 :(得分:1)

在.ajax中,使用post方法调用此方法:

[HttpPost] 
public ActionResult GetPinPoints() {
    var obj = new ...
    return Json(obj);
}

答案 1 :(得分:1)

最简单的方法是使用protected Json method on the Controller class。这将获取一个对象并使用JsonResult返回它的JSON表示。

使用您的示例:

public ActionResult GetPinPoints() {
    return Json(jsonobject);
}

如果您不喜欢ASP.NET MVC将对象序列化为JSON的方式,您可以自己动手,创建一个ActionResult来获取您的对象(或您构建的JSON)并编写内容回到响应流。只需确保您发回的ContentType类型为application/jsontext/javascript

从那里,您可以使用getJSON in jQuery来调用结果,然后根据需要使用该对象。

请注意,如果您不需要任何过于复杂的内容,或者您​​的设计不需要它,则不需要HttpPostAttribute

答案 2 :(得分:1)

两部分:

1)控制器

public JsonResult GetPinPoints()
{
    var stuff = DoStuff();
    return Json(stuff);
}

2)视图(通过JQuery)

$('#SomeButtonId').click(function () {

$.ajax({
    url: '/Controller/GetPinPoints',
    type: "POST",
    dataType: "json",
    success: function(data) {
        $('#someSuccessDiv').html(data).fadeIn();   
        //Do whatever here, just a poor mans example
    },
    error: function() {
        $('#someErrorDiv').html('Boo').fadeIn();
    }
});

    return false;
});