我有一个包含其他视图模型的视图模型。
public class AggregateVM
{
public BrandVM BrandVM { get; set; }
public TinTypeVM TinTypeVM { get; set; }
}
当我通过http post访问控制器操作时,TinTypeVM将填充我编辑过的值,但我使用partial的BrandVM视图模型始终为空。
这是视图。
@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 }),但都没有帮助。
发布于 2018-06-10 08:30:03
Short Answer
你也需要把AggregateVM
传递给你的partial。
Long Answer
你现在做的方式是:
@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
传递给你的partial。
@model SaveEF.ViewModels.AggregateVM
@Html.EditorFor(model => model.BrandVM.Name)
现在编辑器的名称将是BrandVM.Name
。因此,当您发布时,默认的模型绑定器将查找属性BrandVM.Name
并找到它。因此,它将填充它。
另一种方法是使用@Html.Editor
自己指定name
属性,或者传递该属性。
https://stackoverflow.com/questions/50779071
复制相似问题