ショッピングカートを構築しており、ショッピングカートにアイテムを追加する方法が成功しています。コントローラへのPOST操作により、Chromeコンソールで「500(内部サーバーエラー)」エラーが発生する
POST http://localhost:62745/ShoppingCart/RemoveFromCart 500 (Internal Server Error)
ShoppingCartのコントローラーでRemoveFromCart()メソッドを呼び出す必要がありremove
ボタンリンクは、JSONオブジェクトを受け取ります。しかし、私は失敗していると、次のエラーを与えているAjax呼び出しを使用していますこれらの項目を削除するにはいくつかのページ要素を更新します。私はこのフォーラムの提案を試みたが、彼らは役に立たない:https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/mvc-music-store/mvc-music-store-part-8
これは、ショッピングカートページ内のJavaScriptである:私はまた、ショッピングカートを構築するため、このチュートリアルに従っhttp://mvcmusicstore.codeplex.com/discussions/244052
<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>
列にShoppingCartのページにそれぞれの新しい項目に表示されます。
@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>
}
は、次のJavaScriptで呼ばれるべきShoppingCartControllerでRemoveFromCart
方法です:
// 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ではなくstringを返すことに注意してください。 ASP.NET MVCデータバインダーで解析する必要があるため、実際には問題になりません。 しかし、渡された値をjqueryでIntに解析したり、メソッドのid型をintからstringの型に変更したりすることができます。 – faint220
'500(内部サーバーエラー)'は、コントローラメソッドが例外をスローしていることを意味します。ブラウザーツール - ネットワークタブ - を使用して、例外の詳細を示す応答を検査します。 –