Asp.net mvc 2 在电子商务购物车中使用$(“form”).serialize()

Asp.net mvc 2 在电子商务购物车中使用$(“form”).serialize(),asp.net-mvc-2,jquery,Asp.net Mvc 2,Jquery,我正在开发一个电子商务应用程序购物车。我有一个定价页面,其中显示了多个类别的产品及其价格列表。用户可以选择向购物车添加多个产品(活动购物车显示在页面右侧)。我正在尝试使用Ajax/jQuery将项目添加到购物车中。我有一个包装在每个产品周围的表单,其中包含多个隐藏字段,我希望传递给我的函数和控制器。您可以在下面的代码中看到所有这些: <% foreach (var _category in Model) { %> <% foreach (var _product in

我正在开发一个电子商务应用程序购物车。我有一个定价页面,其中显示了多个类别的产品及其价格列表。用户可以选择向购物车添加多个产品(活动购物车显示在页面右侧)。我正在尝试使用Ajax/jQuery将项目添加到购物车中。我有一个包装在每个产品周围的表单,其中包含多个隐藏字段,我希望传递给我的函数和控制器。您可以在下面的代码中看到所有这些:

<% foreach (var _category in Model) { %>
    <% foreach (var _product in _category.Products)
        { %>
        <tr>
            <td align="left" valign="top"><% = _product.Description %> (<% = _product.Code %>)</td>
            <td valign="top" align="center">$<% = _product.TotalPrice %></td>
            <td align="left">
                <form id="frmProduct_<%=_product.Code%>">
                    <input type="button" onclick="JavaScript:addProductToBasket(this.form);" value="+ Add to cart" />
                    <input type="text" id="hProductCode" value="<% = _product.Code %>" />
                    <input type="text" id="Text1" value="<% = _product.TotalPrice %>" />
                    <!--Other hidden fields for passing data -->
                </form>
            </td>
        </tr>
    <% } %>    
<% } %>    

()
$
因为页面上有多个表单,所以我很难访问javascript函数中的特定表单。处理这种情况的最佳方法是什么

<script type="text/javascript">
    function addProductToBasket(_form) {
        alert('Hi');
        var str = $('#_form').serialize();
        alert(str);
    }
</script>

函数addProductToBasket(_形式){
警报(“Hi”);
var str=$('##_form')。序列化();
警报(str);
}

我正在使用ASP.NET MVC 2.0,目前无法移动到MVC 3.0。

尝试在不使用javascript的情况下使表单正常工作。然后开始考虑所有ajax和jQuery的内容

  • 从表单中删除id属性并添加action属性(或使用MVC方法:使用Html.BeginForm),向表单标记添加class属性
  • 删除Totalprice字段,您应该始终计算此服务器端,您需要提交的唯一字段是产品代码(和数量)
  • 删除javascript按钮,并将其替换为经典的提交按钮
当您想要对表单进行ajaxify时,请尝试以下操作:

$(function () {
 $(".addproductform").submit(function () { // turn all forms with the addproductform class into an ajax version
  $.post($(this).attr("action"), $(this).serialize(), function (data) {
   // data contains the confirmation or failure that the product was added to your cart, update the cart html on this page
  });

  return false; // form already submitted using ajax, don't submit it again the regular way
 });
});

我按照您的建议,使用Html.BeginForm语句在循环中构建表单,它可以发布,我尝试对表单进行ajaxify处理,但发出警报($(this.serialize());什么也没给我。。。我没有收到任何错误,但是$(this).serialize()返回的是空值。我会错过什么呢?------------$(函数(){$(“.addProductToCartForm”).submit(函数(e){e.preventDefault();警报($(this.serialize());返回false;});});您没有在输入标记中添加名称属性。