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 回答
0

我将两个模型合二为一,并将部分视图包裹在一个表单上。

class MyModel
{
   ...
}

    @model MyModel;
    @using(Html.BeginForm())
    {
         Html.RenderPartial("Path",Model);
         Html.RenderPartial("Path",Model);   
    }
于 2013-11-06T15:37:24.230 回答