1

私のプロジェクトでは、同じページに複数のフォームがあり、それらを一度にコントローラーに渡したいと思っています。それを達成する方法は?

<script>
function onSaveButtonClicked() {
    var form = $("#SaveForm").serialize();
    var form2 = $("#SaveForm").serialize();


    $.ajax({
        url: '@Url.Action("Filter","SearcherEngine")',
        type: 'post',
        dataType: 'json',
        contentType: 'application/json',
        data: JSON.stringify({ model: form, model2: form2 }),
        cache: false,
        success: function (result) {
            alert(result);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError);
        }
    });

};

[HttpPost]
public ActionResult Filter(MyViewMOdel model,MyViewModel2 model2)
{
}
4

2 に答える 2

1

これを複雑にしているのは、フォームごとに異なるビュー モデルです。その結果、単純に配列を使用して共通クラスのリストにマップすることはできません。

モデル バインディングは、渡されたオブジェクトの構造に基づいて行われることに注意してください (この場合は投稿されます)。したがって、C#で渡したいものの構造を保持できるモデルを作成し、JavaScriptで同じ構造を作成して渡す必要があります

public class ViewModelSet
{
 public MyViewModel model1 { get; set; }
 public MyViewModel1 model2 { get; set; }
}

ここで、javascriptのプロパティにまったく同じ名前を付けて、この構造を再作成する必要があります。

var form1 = ...;
var form2 = ...;

var modelSet = {};
modelSet.model1 = form1;
modelSet.model2 = form2;

次にこれを渡します (パラメーターの名前のみが、予期されるパラメーター サーバー側の名前と一致する必要があります)。

data: { model : modelSet },

そして、これがサーバー側に渡されることを期待してください

public ActionResult FilterNCTS(ViewModelSet model)
{
  //Now you should be able to have access to nested models
  // TODO: work with model.model1
  ...
}
于 2013-10-30T15:52:19.063 に答える