为什么将带有子对象列表的模型传递给控制器​​时,子对象列表没有通过?

时间:2018-09-04 08:12:01

标签: c# asp.net-mvc

我有2个模型类:

guard let url = URL(string: profileImageUrl) else { return }

URLSession.shared.dataTask(with: url) { (data, response, err) in
    if let err = err { print("Failed to fetch the profile image:", err); return }

    //check for response status here

    guard let data = data else { return }
    let image = UIImage(data: data)

    DispatchQueue.main.async {
        self.profileImage.image = image
    }

    }.resume()
}

提交表单时,除GroupSet外,所有字段均从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,但这不能通过自定义模型列表来完成。

1 个答案:

答案 0 :(得分:2)

假设您具有以下模型设置:

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

然后,您可以使用for循环来迭代GroupSets并为每个数字类型/ string / DateTime(包括Nullable<T>)属性分配其索引它具有:

@model ModelWithList

@* other code *@

@for (int i = 0; i < Model.GroupSets.Count; i++)
{
    @Html.HiddenFor(model => model.GroupSets[i].GroupId)

    @Html.HiddenFor(model => model.GroupSets[i].GroupName)
}

接下来,假设您要移动SetOfGroups属性并创建一个新列表:

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

public class Group
{
    public int GroupId { get; set; }
    public string GroupName { get; set; }
}

然后,您应该添加另一个for循环来绑定它们:

@model ModelWithList

@* other code *@

@for (int i = 0; i < Model.GroupSets.Count; i++)
{
    @for (int j = 0; j < Model.GroupSets[i].Groups.Count; j++)
    {
        @Html.HiddenFor(model => model.GroupSets[i].Groups[j].GroupId)

        @Html.HiddenFor(model => model.GroupSets[i].Groups[j].GroupName)
    }
}

尽管可以像上面的示例一样将嵌套列表添加到视图中,但是呈现HTML帮助器的循环将变得更加复杂,应避免使用。

重要提示:

不应HiddenFor分配给List<T>,如下所示:

@Html.HiddenFor(model => model.GroupSets)

因为Razor隐式调用那个ToString()对象的List<T>方法,导致插入到value属性的列表的完全限定名称,并且绑定将忽略它,因为{{1 }}不是GroupSets属性:

string

相关问题:

List item inside model always null on post - Asp.net MVC