C# 为什么将带有子对象列表的模型传递给控制器时,子对象列表不会被传递?

C# 为什么将带有子对象列表的模型传递给控制器时,子对象列表不会被传递?,c#,asp.net-mvc,C#,Asp.net Mvc,我有两个模型课: public class ModelWithList { int Id { get; set; } string Name { get; set; } List<SetOfGroups> GroupSets { get; set; } } public class SetOfGroups { List<Groups> Groups { get; set; } } 公共类ModelWithList { int Id{g

我有两个模型课:

public class ModelWithList 
{
    int Id { get; set; }
    string Name { get; set; }
    List<SetOfGroups> GroupSets { get; set; }
}

public class SetOfGroups
{
    List<Groups> Groups { get; set; }
}
公共类ModelWithList
{
int Id{get;set;}
字符串名称{get;set;}
列表组集{get;set;}
}
公共类组集合
{
列表组{get;set;}
}
当我提交表单时,所有字段都将从
ModelWithList
传递,但组集除外


通常情况下,我会使用
@Html.HiddenFor(model=>model.groupset)
来处理未传递的属性,但这无法通过自定义模型列表完成。

假设您有此模型设置:

public class ModelWithList {
    int Id { get; set; }
    string Name { get; set; }
    List<SetOfGroups> GroupSets { get; set; }
}

public class SetOfGroups
{
    public int GroupId { get; set; }
    public string GroupName { get; set; }
}
接下来,假设您正在移动
SetOfGroups
properties并创建一个新列表:

public class SetOfGroups
{
    List<Group> Groups { get; set; }
}

public class Group
{
    public int GroupId { get; set; }
    public string GroupName { get; set; }
}
尽管可以像上面的示例那样将嵌套列表添加到视图中,但呈现HTML帮助程序的循环将变得更加复杂,应该避免

重要提示:

不应将
HiddenFor
分配给
列表
,如下所示:

@Html.HiddenFor(model => model.GroupSets)
因为Razor隐式地调用
ToString()
方法到该
列表
对象,导致列表的完全限定名插入到
属性中,绑定将忽略它,因为
组集
不是
字符串
属性:

<input id="GroupSets" name="GroupSets" type="hidden" value="System.Collections.Generic.List`1[ProjectNamespace.Models.SetOfGroups]">

相关问题:


假设您有此模型设置:

public class ModelWithList {
    int Id { get; set; }
    string Name { get; set; }
    List<SetOfGroups> GroupSets { get; set; }
}

public class SetOfGroups
{
    public int GroupId { get; set; }
    public string GroupName { get; set; }
}
接下来,假设您正在移动
SetOfGroups
properties并创建一个新列表:

public class SetOfGroups
{
    List<Group> Groups { get; set; }
}

public class Group
{
    public int GroupId { get; set; }
    public string GroupName { get; set; }
}
尽管可以像上面的示例那样将嵌套列表添加到视图中,但呈现HTML帮助程序的循环将变得更加复杂,应该避免

重要提示:

不应将
HiddenFor
分配给
列表
,如下所示:

@Html.HiddenFor(model => model.GroupSets)
因为Razor隐式地调用
ToString()
方法到该
列表
对象,导致列表的完全限定名插入到
属性中,绑定将忽略它,因为
组集
不是
字符串
属性:

<input id="GroupSets" name="GroupSets" type="hidden" value="System.Collections.Generic.List`1[ProjectNamespace.Models.SetOfGroups]">

相关问题:


太好了,我没有意识到我必须为我认为可能有更好的方法的每一处房产添加一个隐藏字段。感谢您的帮助。当我为每个属性添加
HiddenFor
时,它会完全通过,但是当我使用带有
Html.RenderPartial(“_GroupSetPartial”,GroupSets[I])的局部视图时EditorFor
的code>属性不会传递到控制器。
\u GroupSetPartial
中的内容是什么?是否尝试根据列表索引多次渲染局部视图?也许您应该通过
groupset
,而不建立索引,并将部分视图模型设置为
IEnumerable
。很好,我没有意识到我必须为每个属性设置一个隐藏字段,我认为可能有更好的方法。感谢您的帮助。当我为每个属性添加
HiddenFor
时,它会完全通过,但是当我使用带有
Html.RenderPartial(“_GroupSetPartial”,GroupSets[I])的局部视图时EditorFor
的code>属性不会传递到控制器。
\u GroupSetPartial
中的内容是什么?是否尝试根据列表索引多次渲染局部视图?可能您应该通过
groupset
而不建立索引,并将局部视图模型设置为
IEnumerable