我有一个包含其他视图模型的视图模型。
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");
}
如何在视图中使用局部视图,并且仍将单个视图模型传递给EditAggregate操作?我在Html.BeginForm(“ EditAggregate”,“ Aggregate”,FormMethod.Post,new {vm = Model})中尝试了不同的参数,但这没有帮助。
简短答案
您也需要传递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
或传递属性来自己指定属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句