可能性の重複をHttpPostを理解しようとすると:
MVC(3) handleUpdateはMVC3に
私は(ゆっくり)MVC 3を使用する方法を学んだし、現時点では私が見てを持っていますasp.netウェブサイトのMvcMusicStoreチュートリアルアプリ。
今、私はHttpPostの仕組みを理解しようとしています。私が集めることができるものから、ユーザーはブラウザーで必要なアクションを実行し、jQueryを使用してデータをサーバーに([HttpPost]属性の対応する関数に)ポストバックします。この場合、a jsonの結果は、これを処理し、それに応じて要素を更新するブラウザに返されます。
これは分かりますが、私が見ている特定のスニペットコードでは、jsから呼び出しが行われていないように見えるときにhandleUpdate()関数がどのようにヒットしているのか理解できません。またはサーバー側のコードです。私がここで紛失しているものはありますか?とにかく、ここでフロントエンドである:
@model MvcMusicStore.ViewModels.ShoppingCartViewModel
@{
ViewBag.Title = "Shopping Cart";
}
<script src="/Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(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 + ')');
});
}
});
});
function handleUpdate() {
// Load and deserialize the returned JSON data
var json = context.get_data();
var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
// 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>
<h3>
<em>Review</em> your cart:
</h3>
<p class="button">
@Html.ActionLink("Checkout >>", "AddressAndPayment", "Checkout")
</p>
<div id="update-message">
</div>
<table>
<tr>
<th>
Album Name
</th>
<th>
Price (each)
</th>
<th>
Quantity
</th>
<th></th>
</tr>
@foreach (var item in Model.CartItems)
{
<tr id="[email protected]">
<td>
@Html.ActionLink(item.Album.Title, "Details", "Store", new { id = item.AlbumId }, null)
</td>
<td>
@item.Album.Price
</td>
<td id="[email protected]">
@item.Count
</td>
<td>
<a href="#" class="RemoveLink" data-id="@item.RecordId">Remove from cart</a>
</td>
</tr>
}
<tr>
<td>
Total
</td>
<td>
</td>
<td>
</td>
<td id="cart-total">
@Model.CartTotal
</td>
</tr>
</table>
、ここでは(関連する)サーバー側のコードです:
//
// AJAX: /ShoppingCart/RemoveFromCart/5
[HttpPost]
public ActionResult RemoveFromCart(int id)
{
// Remove the item from the cart
var cart = ShoppingCart.GetCart(this.HttpContext);
// Get the name of the album to display confirmation
string albumName = storeDB.Carts
.Single(item => item.RecordId == id).Album.Title;
// Remove from cart
int itemCount = cart.RemoveFromCart(id);
// Display the confirmation message
var results = new ShoppingCartRemoveViewModel
{
Message = Server.HtmlEncode(albumName) +
" has been removed from your shopping cart.",
CartTotal = cart.GetTotal(),
CartCount = cart.GetCount(),
ItemCount = itemCount,
DeleteId = id
};
return Json(results);
}
私はhandleUpdate()が返されるJSONに基づいてDOMを操作していることがわかりますしかし、私はそれがどのように呼び出されているのか私の人生のために把握することはできません?いくつかのjQueryの魔法が進行しているのですか、それともどういう仕組みが完全に誤解されていますか?
ありがとうございます!
他の人のようです[同じ質問がありました](http://stackoverflow.com/questions/5243172/mvc3-handleupdate)。まとめると、MVC2から残っているように見えます。私はそのメソッドのスクリプトが実際にヒットしていることを確認します。 –
"handleUpdate"のソースコードを検索しようとしましたか? –
handleUpdate()も呼び出されません。私は上記のコードでは、呼び出されていないと結論づけなければなりません。 – MrBoJangles