如何将多种形式传递给控制器

时间:2013-10-30 15:37:39

标签: asp.net-mvc jquery

在我的项目中,我在同一页面上有多个表单,我想在一个页面中传递给控制器​​。 如何实现?

<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)
{
}

2 个答案:

答案 0 :(得分: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
  ...
}

答案 1 :(得分:0)

我在一个模型中加入了两个模型,并围绕一个表单包装了部分视图。

class MyModel
{
   ...
}

    @model MyModel;
    @using(Html.BeginForm())
    {
         Html.RenderPartial("Path",Model);
         Html.RenderPartial("Path",Model);   
    }