0

MVCモデルバインダーは、ページから値を取得し、それらを複雑な入力のプロパティとしてアクションメソッドに渡すという素晴らしい仕事をしています。

ユーザーが広告申込情報のリストを設定してから注文全体を送信できるショッピングカートタイプのページを作成しようとしています。

最初は、ユーザーがアイテムを追加したいときにAjaxフォームを使用していました。既存のラインアイテムのリストがコントローラーに返され、新しいラインアイテムが追加され、リストの部分的なビューが返されます。

残念ながら、Ajaxフォームが送信された後は別のページにリダイレクトできないようです。ただし、MVCモデルバインダーがそのようにうまく機能するときに複雑なオブジェクトのリストを明示的に作成することを扱いたくないので、jQueryでそれを行いたくありません。

編集:明確にするために、ここに私の問題があります:

フォームに2つの操作を含める必要があります。どちらの操作でも、広告申込情報のリストを返す必要があります。

javascriptを使用してこれらの操作の少なくとも1つを実行する必要があることは私の理解です。また:

  1. HtmlFormを使用して注文全体を送信し、新しいビューを返します
  2. 「アイテムの追加」ボタンがクリックされたときにjQueryでラインアイテムを追加します

また

  1. AjaxFormを使用して、新しい広告申込情報を動的に追加します
  2. 注文が送信された後、javascriptを使用してリダイレクトを実行しますが、これは、javascriptを使用してデータも送信する必要があることを意味します

javascriptを使用せずにこれを行う方法はありますか?movdelバインダーが自分の側で何もしなくても、JSONを使用してラインアイテムのリストを自分で作成したくありません。

4

3 に答える 3

3

わかりました、私はあなたが必要なものを理解していると思います...

  • フォームアクション属性からターゲットアクションURLを取得します
  • フォームをシリアル化してコントローラーに送信します

新しいページにリダイレクトします。

$.ajax({
 url: $('#FormID').attr('action'),
 type: 'POST',
 data: $('#FormID').serialize(),
 success: function (result) {
  window.location = result;
 }
});

ここにいくつかのドキュメント情報APIjquery.serialize()

于 2013-03-12T01:22:13.007 に答える
1

「残念ながら、Ajaxフォームが送信された後は別のページにリダイレクトできないようです。」

これは完全に真実ではありません。コントローラのアクションメソッドに、JavaScriptがリダイレクトするURL文字列を返すようにすることができます。

public string SomeMethod(ViewModel vm)
{
  ...
  return "http://www.google.com";
}

そしてあなたの見解では

$.ajax({
 url: "@(Url.Action("SomeMethod"))",
 type: 'POST',
 traditional: true,
 data: { ViewModel: jsonObject },
 success: function (result) {
  window.location = result;
 }
});
于 2013-03-12T00:06:55.960 に答える
1

フォームの送信で返されるビューでjavascriptを使用してリダイレクトできます...ビューの下部にあるこのようなもの。

@if(Model.ShouldRedirect)
{
    <script type="text/javascript">
      window.location = '/path/to/new/url';
    </script>
}
于 2013-03-12T00:07:05.133 に答える