多个模型绑定到asp.net mvc中的对象列表

时间:2015-06-04 09:07:00

标签: c# asp.net-mvc

您能告诉我如何在表格中选择多个具有多个不同ID的行并将其存储到ViewBag中吗?

此行可以获取ID为" 123":ViewBag.Name = (from m in myDatabase.myTable where m.id == "123" select m).ToList();

的所有行

在视图中调用它:

<tr>
foreach(var item in ViewBag.Name)
{
   <td>@item.ProductName</td>
   <td>@item.Category</td>
}
</tr>

现在。我有一个列表来存储id的值。像这样:

List<string> list = new List<string>();
list.Add("123");
list.Add("456");
list.Add("789");
//.....

一个不完整的循环:

foreach(var item in list)
{
   // ViewBag.Name = from m in myDatabase.myTable where ..........
}

请帮忙!

2 个答案:

答案 0 :(得分:0)

ViewBag.Name是动态类型,已分配给List<myTable>

您可以使用FirstOrDefault查找现有列表中的项目。

foreach(var item in list)
{
    var name = ViewBag.Name.FirstOrDefault(x=>x.ID == item);
    if (name != null) 
    {
       <td>@name.ProductName</td>
       <td>@name.Category</td> 
    }
}

几点:

  • ViewBag.Name会更好地命名,例如ViewBag.MyTableList甚至只是复数ViewBag.Names
  • 如果您使用强烈定义的视图模型而不是ViewBag
  • ,您可能会发现模型绑定更容易
  • 取决于有多少行,您可以提高效率

很难说出ViewBag.Namelist的设置位置。如果这些都在代码隐藏中,那么您可以过滤数据选择而不是在UI上过滤 - 这样会更有效。

答案 1 :(得分:0)

List替换为HashSet(小优化):

HashSet<string> list = new HashSet<string>();
list.Add("123");
list.Add("456");
list.Add("789");
// ...

查询:

ViewBag.Name = (from m in myDatabase.myTable
                where list.Contains(m.id)
                select m).ToList();

添加模型进行查看,并将结果放入模型中,而不是ViewBag