Asp.net 如何将列表列表绑定到视图

Asp.net 如何将列表列表绑定到视图,asp.net,asp.net-mvc,asp.net-mvc-3,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我有一个ViewModel,它有一个包含其他列表对象的列表对象,并希望将其绑定到视图 到目前为止,我所做的是循环浏览第一个列表,如下所示: for (int i = 0; i < Model.ThFirstList.Count(); i++ ) { Html.EditorFor(model => model.TheFirstList[i] , "myView") } for (int i = 0; i < Model.TheSe

我有一个ViewModel,它有一个包含其他列表对象的列表对象,并希望将其绑定到视图

到目前为止,我所做的是循环浏览第一个列表,如下所示:

    for (int i = 0; i < Model.ThFirstList.Count(); i++ )
    {
        Html.EditorFor(model => model.TheFirstList[i] , "myView")
    }
    for (int i = 0; i < Model.TheSecondList.Count(); i++ )
    {
        %><%: Html.DropDownListFor(m => m.TheSecondList[i].ThePropertyIWantToSet, aList)%><%
    }
当I从任何选择框中选择任何内容并回发数据时,将设置第一个列表和第二个列表对象。但是,如果我在列表中选择一个值,我会从服务器返回错误代码500。我猜它找不到任何与请求匹配的控制器方法?因此,我无法设置ThePropertyIWantToSet属性

有人能帮我吗


谢谢

查看视图模型可能更有帮助,但通常在渲染视图模型中的选择列表时,我使用两个单独的属性:一个用于存储选定值,另一个用于实际保存列表本身


查看视图模型可能更有帮助,但通常在渲染视图模型中的选择列表时,我使用两个单独的属性:一个用于存储选定值,另一个用于实际保存列表本身


我不需要费心处理foreach循环等,只需要使用视图模型和编辑器模板。它使生活更容易

因此,从视图模型开始:

public class MyViewModel
{
    public IEnumerable<Type1> TheFirstList { get; set; }
}

public class Type1
{
    public IEnumerable<Type2> TheSecondList { get; set; }
}

public class Type2
{
    public string ThePropertyIWantToSet { get; set; }

    public IEnumerable<SelectListItem> Items
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "1", Text = "item 1" },
                new SelectListItem { Value = "2", Text = "item 2" },
                new SelectListItem { Value = "3", Text = "item 3" },
            };
        }
    }
}
然后对应的
~/Views/Home/Index.cshtml
视图:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.TheFirstList)
    <input type="submit" value="OK" />
}
最后是
~/Views/Home/EditorTemplates/Type2.cshtml
模板:

@model Type1
@Html.EditorFor(x => x.TheSecondList)
@model Type2
@Html.DropDownListFor(
    x => x.ThePropertyIWantToSet, 
    new SelectList(Model.Items, "Value", "Text")
)

现在,在后期操作中,您将获得一个漂亮且正确绑定的视图模型。编辑器模板将负责生成正确的输入字段名称。看看代码是多么简单和干净。无需在视图中编写任何循环,无需担心正确的索引。。。只需将此留给框架即可。

我不需要费心处理foreach循环等,只需使用视图模型和编辑器模板即可。它使生活更容易

因此,从视图模型开始:

public class MyViewModel
{
    public IEnumerable<Type1> TheFirstList { get; set; }
}

public class Type1
{
    public IEnumerable<Type2> TheSecondList { get; set; }
}

public class Type2
{
    public string ThePropertyIWantToSet { get; set; }

    public IEnumerable<SelectListItem> Items
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "1", Text = "item 1" },
                new SelectListItem { Value = "2", Text = "item 2" },
                new SelectListItem { Value = "3", Text = "item 3" },
            };
        }
    }
}
然后对应的
~/Views/Home/Index.cshtml
视图:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.TheFirstList)
    <input type="submit" value="OK" />
}
最后是
~/Views/Home/EditorTemplates/Type2.cshtml
模板:

@model Type1
@Html.EditorFor(x => x.TheSecondList)
@model Type2
@Html.DropDownListFor(
    x => x.ThePropertyIWantToSet, 
    new SelectList(Model.Items, "Value", "Text")
)

现在,在后期操作中,您将获得一个漂亮且正确绑定的视图模型。编辑器模板将负责生成正确的输入字段名称。看看代码是多么简单和干净。无需在视图中编写任何循环,无需担心正确的索引。。。将此问题留给框架解决。

谢谢!我会试试这个。谢谢!我会试试这个。