我有一个包含其他视图模型的视图模型。
public class AggregateVM
{
public BrandVM BrandVM { get; set; }
public TinTypeVM TinTypeVM { get; set; }
}
当我发布到控制器操作的http时,TinTypeVM会填充我编辑的值,但我使用partial的BrandVM视图模型始终为null。
这是视图。
@model SaveEF.ViewModels.AggregateVM
@using (Html.BeginForm("EditAggregate", "Aggregate"))
{
@Html.Partial("_EditBrand", Model.BrandVM)
@Html.Label("Tin Name")
@Html.EditorFor(model => model.TinTypeVM.Name)
<input type="submit" value="Save" />
}
这是部分视图。
@model SaveEF.ViewModels.BrandVM
@Html.Label("Brand Name")
@Html.EditorFor(model => model.Name)
这是控制器的动作。
public ActionResult EditAggregate(AggregateVM vm)
{
SaveBrand(vm.BrandVM);
SaveTinType(vm.TinTypeVM);
return RedirectToAction("Index");
}
如何在视图中使用partials并仍然将单个视图模型传递给EditAggregate操作?我在Html.BeginForm(&#34; EditAggregate&#34;,&#34; Aggregate&#34;,FormMethod.Post,new {vm = Model})中尝试了不同的参数但是没有帮助
答案 0 :(得分:0)
简答
你也需要将AggregateVM
传递给你的部分。
长答案
你现在的做法是:
@model SaveEF.ViewModels.BrandVM
@Html.EditorFor(model => model.Name)
因此,如果您要检查为编辑器生成的name
将是Name
。因此,当您发布时,MVC的默认模型绑定器将在视图模型中查找匹配的属性。但你认为模型是这样的:
public class AggregateVM
{
public BrandVM BrandVM { get; set; }
public TinTypeVM TinTypeVM { get; set; }
}
并且没有Name
属性。
<强>修正强>
你也需要将AggregateVM
传递给你的部分。
@model SaveEF.ViewModels.AggregateVM
@Html.EditorFor(model => model.BrandVM.Name)
现在编辑器的名称为BrandVM.Name
。因此,当您发布时,默认模型绑定器将查找属性BrandVM.Name
并找到它。因此它将填充它。
另一种方法是使用name
自己指定@Html.Editor
属性或传递属性。