Asp.net 如何将列表列表绑定到视图
我有一个ViewModel,它有一个包含其他列表对象的列表对象,并希望将其绑定到视图 到目前为止,我所做的是循环浏览第一个列表,如下所示: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
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")
)
现在,在后期操作中,您将获得一个漂亮且正确绑定的视图模型。编辑器模板将负责生成正确的输入字段名称。看看代码是多么简单和干净。无需在视图中编写任何循环,无需担心正确的索引。。。将此问题留给框架解决。谢谢!我会试试这个。谢谢!我会试试这个。