0

我正在寻找在 MVC3、JQuery AJAX 中完成以下任务的最佳方法:

我有一个购物车,可以为购物车中的每种产品输入不同的船舶地址。这个想法是让这艘船在每个产品的正下方形成,以及一个保存按钮,并通过 JQuery AJAX 提交。

我一直在尝试的方法是将表单放在局部视图中(连同 Html.BeginForm 和提交 SAVE 按钮),然后在视图的 foreach 循环中呈现局部视图(将视图模型项传递给部分视图表单)。

对于购物车中的第一个产品,一切正常,但是当我尝试为购物车中的第二个或第三个产品输入并提交任何其他表单地址时,我实际上是从第一个产品中获取 ID 并更新那个。

通过 Google 阅读,我发现了有关模型绑定到表单的文章,但对于这些情况,我在 foreach 循环之前有一个整体 Html.BeginBeginForm 并且只有一个提交按钮。如何为每个产品下的每个表单设置一个提交 (SAVE) 按钮并通过 AJAX 调用提交?

千人先谢过!!!

更新:

也许为了更好地了解我在这里所做的事情是这个例子:

在主视图 Cart.cshtml 中,我有:

@foreach (var item in Model.CartItems)
{
   @Html.Partial("ShipToAddress", new AddressViewModel(item.CartDetailsId))
}

然后在 ShipToAddress.cshtml 的部分视图中,我有:

@using (Html.BeginForm("SaveShipToAddress", null, FormMethod.Post))
{ 
  @Html.HidenFor(model => model.ItemId)
  @Html.TextBoxFor(model => model.Name)
  @Html.TextBoxFor(model => model.Address)
  <input type="submit" value="Save" id="saveShipToAddress" />
}

然后我有绑定到这个表单并通过 AJAX 提交的 jquery 脚本文件。

I think my problem is that the form is inside the partial view, so when it gets generated it has the same IDs for all the items in the cart.

Thanks!

4

2 回答 2

1

Use jQuery serialize method to serialize that part of form and send that to an action method. You can still do the modal binding there. Something like this you can do on your save button click event.

$.post("Yourcontroller/YourAction", $("#formId").serialize() ,function(data){
  //do whatever with the response

});
于 2012-05-30T00:24:40.393 回答
1

In case anyone else needs to do something similar I ended up solving this by adding an itemId attribute to the form:

@using (Html.BeginForm("SaveShipToAddress", null, FormMethod.Post, new { @class = "frmShipToAddress", itemId = Model.ItemId.ToString() }))

and then the jquery file I've grabbed that:

var shipAddress = {   
itemId: form.attr('itemId'),
name: form.find('input[name="Name"]').val(),
address: form.find('input[name="Address"]').val() }

var jsonData = JSON.stringify(shipAddress);

and passed the jsonData to the ajax call, which was then received in the controller and correctly parsed due to using the viewmodel object.

于 2012-05-31T00:03:24.967 回答