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.
    });
}