2015-09-22 76 views
0

我問這個問題的原因是因爲我沒有看到太多的例子。基本上,我有一個controller其中有一個method that returns void。該方法由post調用,該操作通過jQuery完成。如果帖子成功,我只是用一些html更新頁面的一小部分。我不需要任何方法,所以我返回無效是好的和可以接受的。如果不是,那麼在進行ajax調用時,通常會從控制器方法返回什麼?控制器操作可以通過jQuery post返回void嗎?

這是我的控制器方法:

[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); 

     } 
    }); 
} 

}());

我注意到,如果我的操作方法失敗,錯誤函數將被調用,如果它成功,函數將被調用。

回答

1

沒有返回任何東西,你不知道它是成功的。

return Json(new { success= true }); 

那麼你可以在你的成功函數中檢查data.success

+0

好像即使是無效的,如果有錯誤,我的Ajax錯誤函數被調用,如果沒有,成功的功能。 – xaisoft

+0

我會處理錯誤服務器端並返回成功= false。 – BenG

0

那麼,你不能返回void。行動的迴應必須是ActionResult。你可以返回類似Content(""),這根本就沒什麼,但仍然是一種ActionResult

但是,通常,您應該返回某事,即使它是一個簡單的JSON結構,如:{ "success": true }。無論如何,你想確保你返回一個合適的HTTP狀態,比如200,以獲得成功的請求。

+0

我會更新我的文章,因爲我返回無效,它工作正常,所以也許我做錯了什麼。 – xaisoft

+0

MVC可能會根據返回的void創建一個空的'ContentResult'或類似的東西。 –

+0

我剛剛更新了代碼,我注意到即使我返回void,如果我的方法拋出一個錯誤,ajax調用中的錯誤函數將被調用,如果不是,成功函數將會調用。 – xaisoft

0

這是完全可以接受的,但是你的客戶端不會知道帖子的結果(這會返回204無內容)。

至少,你想讓他們知道。如果你不需要傳回數據,我會建議你做返回類型IHttpActionResult,然後返回Ok()(這將返回200 OK)。

請閱讀更多關於WebApi2返回類型,在這裏:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results

+0

我會嘗試,也許這屬於另一個問題,但我注意到,如果我指定'json'作爲'dataType',它會拋出'parseerror',但我認爲我是returnign'json',除非我對' dataType'?爲什麼我需要將它設置爲'html'才能正常工作?這有點混亂? – xaisoft

+0

在Fiddler或Postman中檢查您的響應,我懷疑您已將您的api配置爲返回XML。您必須在App_Start \ WebApiConfig.cs中配置默認​​返回JSON。 – user1310989

+0

這不是一個api調用。 '_shoppingCartService.AddItem'只是將一個購物車項目添加到數據庫中,它在後臺調用'PetaPoco'。 – xaisoft

相關問題