【问题标题】:how to use a foreach in a view page如何在视图页面中使用 foreach
【发布时间】:2014-08-05 20:07:00
【问题描述】:

尝试将已确认订单的列表传递到供应商页面(使用断点检查列表已过去)只是在使用 foreach 在视图中显示列表时遇到问题。

//SupplierController  
 public ActionResult Index()
 {
 BuyABicycle_Entities db1 = new BuyABicycle_Entities();

 IEnumerable<BicycleOrder> All_Orders = (from c in db1.BicycleOrders
                                                    where c.Id >= 1
                                                    select c).ToList();

  SupplierVM model = new SupplierVM { allOrders = All_Orders };
  return View(model);
}


//SupplierVM
public class SupplierVM
{
  public IEnumerable<BicycleOrder> allOrders { get; set; }
}

Views/Supplier/Index
@model BicycleShop.ViewModels.SupplierVM

    @{
        ViewBag.Title = "Supplier";
        //var orders = (IList<BicycleOrder>) Model.;
        // var orders = (List<BicycleOrder>) Model.Order);
    }

    @using (Html.BeginForm())
    {
    <table>
        @foreach (var _Order in Model.allOrders)
         {
           <text>
               <tr>
                  <td>@_Order.CustomerName</td>       
               </tr>
            </text>
}

    </table>
    <input type="submit" />
}

这会引发@foreach 错误(Model.allOrders 中的var _Order) 编译器错误消息:CS0012:类型“IdeaBlade.EntityModel.Entity”在未引用的程序集中定义。您必须添加对程序集“IdeaBlade.EntityModel, Version=6.1.7.0, Culture=neutral, PublicKeyToken=287b5094865421c0”的引用。

Foreach loop for tables in MVC4 我是否需要为顶部的列表声明一个变量,然后运行该变量

任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: c# asp.net-mvc razor view foreach


    【解决方案1】:

    您的视图将模型指定为IEnumerable&lt;SupplierVM&gt;。因此,要迭代订单,您首先必须迭代供应商:

    @foreach (var supplier in Model)
    {
        foreach (var order in supplier.allOrders)
        {
            ...
        }
    }
    

    但是,您似乎实际上并没有传递许多 SupplierVM 实例,而只是传递了一个。因此,您应该将视图的模型更改为:

    @model BicycleShop.ViewModels.SupplierVM
    

    然后,您可以直接遍历订单:

    @foreach (var order in Model.allOrders)
    {
        ...
    }
    

    【讨论】:

    • 感谢克里斯的回复。是的,那是我的一个错误。供应商虚拟机只包含订单,只是为了保持整洁,无论如何尝试了你的建议,不幸的是它仍然无法更新主 Q。关于类型“IdeaBlade.EntityModel.Entity”的一些东西是在一个程序集中定义的未参考。如果你有更多的想法会很棒
    • 这完全不相关。这是代码中某处的实际错误。即,您在某处引用了一个类,Entity 来自 IdeaBlade.EntityModel 命名空间,并且该命名空间在您的引用中不存在,或者命名空间不包含名为 Entity 的类。
    • 啊,是的,当我应该在模型文件夹中填充类时,我正在使用实体框架中的表。再次感谢
    【解决方案2】:

    也许 razor 混淆了 HTML 和代码:

    试试这个:

        @foreach (var _Order in Model)
        {
            <text>
            <tr>
                <td>@Html.TextBoxFor(x => x.allOrders)</td>
                <td>@_Order.allOrders</td>
                @<td>@Html.TextBoxFor(x => x.CustomerName, new { @readonly = true }) </td>
                @foreach(var item in _Order)
                 {
                     item.ItemProp <br />
                 }
            </tr>
            </text>
        }
    

    {} 剃须刀里面期待它所有的代码,如果你想把 HTML 放在那里 - 多行使用&lt;text&gt;&lt;/text&gt; 一行使用@:

    【讨论】:

    • 很抱歉,这对它有 4 个错误都不起作用。我不确定我是否需要第二个 foreach 只是想弄清楚。该模型包含一个 BicycleOrders 列表 - allOrders。我想循环并输出每个订单“客户名称、客户地址、型号”等......所有这些都在每个 BicycleOrder 中找到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2011-04-06
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多