我正在構建一個購物車,並且我有一個將項目添加到ShoppingCart的成功方法。但是,除去這些項目,我使用了Ajax調用它是不成功的,給了以下錯誤:控制器操作的Ajax帖子在Chrome控制檯中出現「500(內部服務器錯誤)」錯誤
POST http://localhost:62745/ShoppingCart/RemoveFromCart 500 (Internal Server Error)
的remove
按鈕鏈接應該叫在我的購物控制器的RemoveFromCart()方法,得到一個JSON對象並更新多個頁面元素。我想在這個論壇的建議,但他們不幫助:http://mvcmusicstore.codeplex.com/discussions/244052
我也跟着本教程爲構建購物車:https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/mvc-music-store/mvc-music-store-part-8
這是JavaScript在購物車頁面:
<script src="/Scripts/jquery-3.1.1.min.js"
type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
// Document.ready -> link up remove event handler
$(".RemoveLink").click(function() {
// Get the id from the link
var recordToDelete = $(this).attr("data-id");
if (recordToDelete != '') {
// Perform the ajax post
$.post("/ShoppingCart/RemoveFromCart", { "id": recordToDelete },
function (data) {
// Successful requests get here
// Update the page elements
if (data.ItemCount == 0) {
$('#row-' + data.DeleteId).fadeOut('slow');
} else {
$('#item-count-' + data.DeleteId).text(data.ItemCount);
}
$('#cart-total').text(data.CartTotal);
$('#update-message').text(data.Message);
$('#cart-status').text('Cart (' + data.CartCount + ')');
});
}
});
});
</script>
刪除鏈接將與每一個新項目將顯示在頁面的購物車在第四<td>
列:
@foreach (var item in Model.CartItems)
{
<tr id="[email protected]">
<td>
@item.Product.Name
</td>
<td>
@item.Product.Price
</td>
<td id="[email protected]">
@item.Count
</td>
<td>
<a href="#" class="RemoveLink" data-id="@item.RecordId">Remove</a>
</td>
</tr>
}
以下是在ShoppingCartController的RemoveFromCart
方法應該在JavaScript調用:
// AJAX: /ShoppingCart/RemoveFromCart/5
[HttpPost]
public ActionResult RemoveFromCart(int id)
{
var cart = ShoppingCart.GetShoppingCart(this.HttpContext);
var productName = db.Carts.Single(c => c.ProductId == id).Product.Name;
int itemCount = cart.RemoveItemFromCart(id);
var results = new ShoppingCartRemoveViewModel
{
Message = Server.HtmlEncode(productName) +
" has been removed from your shopping cart.",
CartTotal = cart.GetTotal(),
CartCount = cart.GetCount(),
ItemCount = itemCount,
DeleteId = id
};
return Json(results);
}
你必須調試你的控制器動作。 –
我可以想象的唯一原因是你的javascript混合在視圖中,所以它創建一個數組並試圖傳遞數組而不是單個值 如果你確定一切都很好,並且傳遞了單個整數,請記住,jquery .attr返回字符串,而不是int。它並不重要,因爲它應該由ASP.NET MVC數據綁定器進行分析。 但是,你可以嘗試使用jquery將傳遞值解析爲Int,或者將方法中的id類型從int更改爲字符串類型。 – faint220
'500(內部服務器錯誤)'表示控制器方法拋出異常。使用瀏覽器工具 - 網絡選項卡 - 檢查將給出例外細節的響應。 –