Controller Action是否可以使用jQuery帖子返回void?

时间:2015-09-22 18:09:07

标签: jquery asp.net-mvc-4

我问这个问题的原因是因为我没有看到太多的例子。基本上,我的controller有一个method that returns void。该方法由post调用,该方法通过jQuery完成。如果帖子成功,我只需用一些html更新页面的一小部分。我不需要从方法中取回任何东西,所以我返回虚空是好的和可以接受的吗?如果没有,在进行ajax调用时,你通常会从控制器方法返回什么?

这是我的Controller方法:

[HttpPost]
public void AddToCart(ShoppingCartItem shoppingCartItem)
{ 

_shoppingCartService.AddItem(shoppingCartUserId, shoppingCartItem);

}

这是我的javascript:

$(function () {
$("#addToCart").submit(function (e) {

    e.preventDefault();

    var shoppingCartItem = JSON.stringify(
    {
        'Name': $('#Name').val(),
        'ProductId': $('#ProductId').val(),
        'ShortDescription': $('#ShortDescription').val(),
        'Sku': $('#Sku').val()
    });

    AddToCart(shoppingCartItem);
});

function AddToCart(shoppingCartItem) {
    $.ajax({
        url: '/ShoppingCart/AddToCart',
        async: false,
        type: "POST",
        data: shoppingCartItem,
        dataType: "html",
        contentType: "application/json",
        error: function (data) {
            console.log(data);
        },
        success: function () {

            var count = parseInt($('div.item-counter').html()) + 1;
            $('div.item-counter').html(count);

        }
    });
}

}());

我注意到如果我的动作方法失败,将调用错误函数,如果成功,则会调用函数。

3 个答案:

答案 0 :(得分:2)

没有返回任何东西,你不会知道它是成功的。

return Json(new { success= true });

然后您可以在成功函数中查看data.success

答案 1 :(得分:0)

好吧,你不能归还无效。操作的响应必须是ActionResult。您可以返回Content("")之类的内容,这些内容完全没有,但仍然是ActionResult的类型。

但是,通常,您应该返回某些内容,即使它是一个简单的JSON结构,例如:{ "success": true }。无论如何,您希望确保返回正确的HTTP状态,例如200,以获得成功的请求。

答案 2 :(得分:0)

这是完全可以接受的,但是你的客户不会知道帖子的结果(这将返回204 No Content)。

至少,你想让他们意识到。如果您不需要传回数据,我建议您返回类型IHttpActionResult,然后返回Ok()(返回200 OK)。

请在此处阅读有关WebApi2返回类型的更多信息:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results