0

私はMVC3、JQueryAJAXで以下を達成するための最良の方法を探しています:

私はショッピングカートを持っており、カート内の製品ごとに異なる船を入力して住所を指定できます。アイデアは、この船を各製品のすぐ下に形成し、[保存]ボタンを付けて、JQueryAJAXを介して送信することです。

私がやろうとしていた方法は、フォームを部分ビュー内に(Html.BeginFormと送信SAVEボタンとともに)配置し、部分ビューをビューのforeachループ内にレンダリングすることでした。 (viewmodelアイテムを部分ビューフォームに渡します)。

カート内の最初の商品はすべて正常に機能しますが、カート内の2番目または3番目の商品の他のフォームアドレスを入力して送信しようとすると、実際には最初の商品からIDを取得し、そのIDを更新します。

Googleを読んで、フォームへのモデルのバインドに関する記事を見つけましたが、そのような場合は、foreachループの前に全体的なHtml.BeginBeginFormが1つと、送信ボタンが1つだけあります。各製品の下の各フォームに送信(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スクリプトファイルがあります。

私の問題は、フォームが部分ビュー内にあることです。そのため、フォームが生成されると、カート内のすべてのアイテムに対して同じIDが使用されます。

ありがとう!

4

2 に答える 2

1

jQueryserializeメソッドを使用して、フォームのその部分をシリアル化し、それをアクションメソッドに送信します。あなたはまだそこでモーダルバインディングを行うことができます。このようなことは、保存ボタンのクリックイベントで実行できます。

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

});
于 2012-05-30T00:24:40.393 に答える
1

他の誰かが同様のことをする必要がある場合に備えて、フォームに itemId 属性を追加することでこれを解決しました。

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

そして、私がつかんだjqueryファイル:

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

jsonData を ajax 呼び出しに渡しました。これはコントローラーで受信され、viewmodel オブジェクトを使用しているため正しく解析されました。

于 2012-05-31T00:03:24.967 に答える