更新 这是我的解决方案,对我有用: 我为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传递给控制器。
答案 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")
}
它在我这边工作