保存Razor中另一个对象内的对象列表的表单值

时间:2017-10-13 20:32:56

标签: c# asp.net-mvc razor asp.net-core

我有

GET

在我的ViewModel中,我有一个ClassA列表。在我看来,我希望将ClassA的列表放在一个表单中以及它们包含的ClassB中,以便可以更新ClassA和ClassB对象。

所以在我看来我有

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");
}

这是视图模型

@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" />
    }
}

当表单提交时,在post方法中,ClassA属性会更新,但是,该ClassA对象的所有ClassB属性都不会。

有没有办法让ClassBList中的属性及其父ClassA属性参与?

1 个答案:

答案 0 :(得分:0)

看起来你有一个错误,可能导致Exception或Binding数据覆盖。

变化:

i < Model.ClassA[i].ClassBList.Count()

要:

j < Model.ClassA[i].ClassBList.Count()

另外请确保您的模型是一个类而不是列表。

@model SomeViewModel and not @model List<ClassA>