C# 试图理解MVC3中的HttpPost
可能重复:C# 试图理解MVC3中的HttpPost,c#,jquery,asp.net,asp.net-mvc-3,C#,Jquery,Asp.net,Asp.net Mvc 3,可能重复: 我正在(慢慢地)学习如何使用MVC 3,目前正在asp.net网站上查看MvcMusicStore教程应用程序 现在我正试图了解HttpPost是如何工作的。据我所知,用户在浏览器中执行他们想要的任何操作,然后使用jQuery将数据发布回服务器(到具有[HttpPost]属性的相应函数),在这种情况下,json结果将发送回浏览器,浏览器将处理此操作并相应地更新元素 我很理解这一点,但在我正在查看的特定代码片段中,我无法理解当js或服务器端代码似乎没有调用时,如何命中“handleU
我正在(慢慢地)学习如何使用MVC 3,目前正在asp.net网站上查看MvcMusicStore教程应用程序 现在我正试图了解HttpPost是如何工作的。据我所知,用户在浏览器中执行他们想要的任何操作,然后使用jQuery将数据发布回服务器(到具有[HttpPost]属性的相应函数),在这种情况下,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="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>
我可以看到handleUpdate()根据返回的JSON操作DOM,但我始终无法弄清楚它是如何被调用的?是有一些jQuery的魔力在发挥,还是我完全误解了这一切的工作原理
谢谢 没有人叫它
客户端调用服务器端的RemoveFromCart
方法的相关代码如下:
if (recordToDelete != '') {
// Perform the ajax post
$.post("/ShoppingCart/RemoveFromCart", { "id": recordToDelete },
function (data) {
// Handle result.
});
}
注意URL是/ShoppingCart/RemoveFromCart
,它映射到RemoveFromCart
方法的URL路由
正在使用调用控制器上的方法,然后传递闭包(由
函数(){…}
指示),而不是handleUpdate
方法。它看起来像其他方法。总而言之,它看起来像是MVC2的遗留物。我将验证该方法中的脚本是否确实被命中。您是否尝试在源代码中搜索“handleUpdate”?我也没有看到调用handleUpdate()。我必须得出结论,在上面的代码中,它没有被调用。是的,我在代码中搜索它,没有找到任何引用-这就是我发现的奇怪之处!谢谢Ek0nomik-我来看看编辑:只要看看链接Ek0nomik-谢谢,这正是我要找的!:)如果你对这个帖子做出回应,我会很高兴地把它标记为答案。。
if (recordToDelete != '') {
// Perform the ajax post
$.post("/ShoppingCart/RemoveFromCart", { "id": recordToDelete },
function (data) {
// Handle result.
});
}