gpt4 book ai didi

c# - 试图理解 MVC3 中的 HttpPost

转载 作者:行者123 更新时间:2023-11-30 16:25:50 27 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
MVC(3) handleUpdate

我正在(慢慢地)学习如何使用 MVC 3,目前我正在查看 asp.net 网站上的 MvcMusicStore 教程应用程序。

现在我正在尝试了解 HttpPost 的工作原理。据我所知,用户在浏览器中执行他们想要的任何操作,然后使用 jQuery,将数据发回服务器(发回具有 [HttpPost] 属性的相应函数),然后在这种情况下,一个json 结果被发送回浏览器,由浏览器处理并相应地更新元素。

我明白这一点,但在我正在查看的特定代码片段中,我无法理解当似乎没有从 js 或服务器端代码。我在这里缺少什么吗?不管怎样,这里是前端:

@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="row-@item.RecordId">
<td>
@Html.ActionLink(item.Album.Title, "Details", "Store", new { id = item.AlbumId }, null)
</td>
<td>
@item.Album.Price
</td>
<td id="item-count-@item.RecordId">
@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 魔法在发生,还是我完全误解了这一切是如何工作的?

谢谢!

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com