另一个对象中的对象的剃刀
列表保存表单中的值我有另一个对象中的对象的剃刀
public class ClassA
{
public int ID { get; set; }
public List<ClassB> ClassBList { get; set; }
}
public class ClassB
{
public int ID { get; set; }
public string Name { get; set; }
public bool IsValid { get; set; }
}
// View Model Razor is using
public class IndexViewModel
{
public List<ClassA> ClassAList { get; set }
public IndexViewModel()
{
ClassAList = /*...init list from repository method...*/
}
}
// POST method
[HttpPost]
public IActionResult Index(IndexViewModel model)
{
// Here is where only the model has the updated ClassA properties, but not their ClassB properties
return RedirectToAction("Index");
}
在我的ViewModel我有ClassA的一个列表。在我看来,我希望将ClassA的列表放入一个表单以及它们包含的ClassB中,以便可以更新ClassA和ClassB对象。
所以,我认为我有
@for (int i = 0; i < Model.ClassA.Count(); i++)
{
<input asp-for="@Model.ClassA[i].ID" />
@for (int j = 0; j < Model.ClassA[i].ClassBList.Count(); j++)
{
<input asp-for="@Model.ClassA[i].ClassBList[j].ID" />
<input asp-for="@Model.ClassA[i].ClassBList[j].Name" />
<input asp-for="@Model.ClassA[i].ClassBList[j].IsValid" />
}
}
,这里是视图模型
public class IndexViewModel
{
public List<ClassA> ClassAList { get; set }
}
当表单提交,在POST方法中,ClassA的性能得到更新,但是,没有的该ClassA对象的ClassB属性。
有没有办法让ClassBList中的属性以及它的父类ClassA属性?
看来你有一个错误,这可能导致异常或绑定数据覆盖。
变化:
i < Model.ClassA[i].ClassBList.Count()
要:
j < Model.ClassA[i].ClassBList.Count()
还要确保,你的模型是一个类,而不是一个列表。
@model SomeViewModel and not @model List<ClassA>
OP的错误有很多假设。这是最好的部分答案。 – OctoCode
@StephenMuecke它可以和更明智的是'模型SomeModelContainingAPropertyOfListClassACalledClassA' –
它可以是它不需要。 OP没有显示他们正在使用的视图模型:) –
什么类型的控制器动作传入模型?你在View上使用什么类型? – OctoCode
也许你应该开始简单,没有嵌套属性的普通模型。因为你的表单绑定已经不正确,这表明你还没有解决这个简单的案例。 – poke
@OctoCode所以View使用与表单提交给控制器相同的模型。在这种情况下,Razor使用“@model ViewModels.Home.IndexViewModel”,控制器也使用IndexViewModel。 – Daath