在asp MVC 5中将多个模型从View传递到Controller

时间:2017-01-15 12:34:32

标签: c# asp.net-mvc asp.net-mvc-5

更新 这是我的解决方案,对我有用: 我为Model1创建了两个子视图,为Model2创建了一个子视图 在大视图模型中,我通过以下方式渲染它们:

@{Html.RenderPartial("view1", Model.model1);}
@{Html.RenderPartial("view2", Model.model2);}

在控制器中我有像这样的Action方法

BigViewModel model= new BigViewModel();
  return View(model);

我有像这样张贴的Action方法:

  [HttpPost]
     public ActionResult fun(Model1 model1,Model2 model2)
{
//Logic go here
}

=================================

我有两个这样的模型:

public class Model1 {
    ... more properties here ...
}

public class Model2 {
    ... more properties here ...
}

然后我创建了一个大模型:`

    public class BigViewModel {
    public Model1 model1 { get; set; }
    public Model2 model2{ get; set; }
}

然后创建了一个类型的强类型视图(BigViewModel) 这样用户就可以编辑该视图中的字段,然后按“提交”按钮返回服务器进行处理 public ActionResult test(BigViewModel model)

但该模型为空。 我需要一种方法将BigViewModel传递给控制器​​。

1 个答案:

答案 0 :(得分:0)

我有这样的模特

public class Model1
{
    public int Id { get; set; }
}

public class Model2
{
    public int Id { get; set; }

}

public class BigViewModel
{
    public Model1 model1 { get; set; }
    public Model2 model2 { get; set; }
}

我有像这样的httppost动作方法

    [HttpPost]
    public ActionResult Test(BigViewModel vm)
    {
        if (vm == null)
        {
            throw new Exception();
        }
        return View();
    }

我有像这样的剃刀视图

@model WebApplication2.Models.BigViewModel

@{
    ViewBag.Title = "Test";
}

<h2>Test</h2>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>BigViewModel</h4>
        <hr/>
        @Html.ValidationSummary(true, "", new {@class = "text-danger"})
        @Html.EditorFor(s => s.model1.Id)
        @Html.EditorFor(s => s.model2.Id)
    </div>


    <button type="submit">Save</button>
}

   <div>
        @Html.ActionLink("Back to List", "Index")
    </div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

它在我这边工作