【问题标题】:Using dictionary to display values in VIEW使用字典在 VIEW 中显示值
【发布时间】:2013-07-22 15:51:50
【问题描述】:

使用 Orchard 1.6 MVC 我想在屏幕上显示“供应商”列表。对于每个供应商,显示他们的产品列表和剩余数量。

Supplier 1
product 101
product 102

supplier 2
product 103
product 104
product 105

etc...

我的视图模型

public class SuppliersOrderVM
    {
        public IEnumerable<SupplierInfo> SupplierInformation = new List<SupplierInfo>();
        public Dictionary<int, QBSupplierRecord> Suppliers { get; set; }
        public Dictionary<int, QBProductRecord> Products { get; set; }

        public SuppliersOrderVM(IEnumerable<SupplierInfo> supplierInformation, Dictionary<int, QBSupplierRecord> suppliers, Dictionary<int, QBProductRecord> products)
        {
            SupplierInformation = supplierInformation;
            Suppliers = suppliers;
            Products = products;
        }

        public class SupplierInfo
        {
            public int SupplierId { get; set; }
            public bool SendEmail { get; set; }

            public List<ProductInfo> Products = new List<ProductInfo>();
        }

        public class ProductInfo
        {
            public int ProductId { get; set; }
            public int Quantity { get; set; }
        }
    }

所以在视图中,我使用字典来输出供应商名称。但我无法为该供应商输出产品。我的第二个 foreach 循环可能是错误的,并且我的语法对于显示产品不正确。 请帮我修改一下

 @{
foreach (var supplier in Model.SupplierInformation)
{
            <div class="editor-label">@Html.Label("SupplierName")</div>
            <div class="editor-label">@Model.Suppliers[supplier.SupplierId].CompanyName</div>

           @* <div class="editor-label">@Html.HiddenFor(s => s.SupplierInfor[0].</div>*@

    foreach (var product in Model.SupplierInformation)
    {
            //create table and output product code & product Quantity
<div class="editor-label">@Model.Products[product.Products].ProductCode</div>

它告诉我 [product.Products] 有一些无效参数。

【问题讨论】:

    标签: c# asp.net-mvc razor dictionary orchardcms


    【解决方案1】:

    如果我错了,请纠正我,但据我了解,您正在尝试显示

    1. ProductCodeQBProductRecord 类中,并且该类被用作模型类SuppliersOrderVM 中字典的一部分(其中使用的键是ProductId)。
    2. QuantityProduct 类中的一个属性。

    那么你应该使用下面的代码。您代码中的错误是您尝试使用 product.Products 作为索引,它应该是一个整数,但它不是。

    @{
    foreach (var supplier in Model.SupplierInformation)
    {
                <div class="editor-label">@Html.Label("SupplierName")</div>
                <div class="editor-label">@Model.Suppliers[supplier.SupplierId].CompanyName</div>
    
               @* <div class="editor-label">@Html.HiddenFor(s => s.SupplierInfor[0].</div>*@
    
        foreach (var product in supplier.Products)
        {
                //create table and output product code & product Quantity
    <div class="editor-label">@Model.Products[product.ProductId].ProductCode</div>
               //display quantity
    <div class="editor-label">product.Quantity</div>
    

    【讨论】:

      【解决方案2】:

      这条线是什么意思?:

      Model.Products[product.Products]
      

      如果我正确地遵循了您的模型层次结构,ModelSuppliersOrderVM 的一个实例。这意味着Model.ProductsDictionary&lt;int, QBProductRecord&gt; 的一个实例。为了从Dictionary 访问元素,您需要使用int 对其进行索引。但是,product.Products 不是int,而是List&lt;ProductInfo&gt;

      您的意思是为List&lt;ProductInfo&gt; 添加另一个循环,以便访问其中每个元素的ProductId 属性吗?像这样?:

      foreach (var productInfo in product.Products)
          <div class="editor-label">@Model.Products[productInfo.ProductId].ProductCode</div>
      

      很难准确地说出您要做什么。模型层次结构有点尴尬,有这么多称为“产品”的东西。

      【讨论】:

      • @Model.Products[product.Products].ProductCode
      • @John:它需要在一个循环中才能使用来自product.Products 的值,如发布的答案中所示。 product 中的每个 SupplierInfo 对象内部都有一个 ProductInfo 对象列表。因此,您不能将整个列表传递给 Model.Products 字典。您必须遍历该列表并将每个 ID 传递给字典。如果您将循环中的 product 变量重命名为 supplierInfo,将其命名为 foreach (var supplierInfo in Model.SupplierInformation),可能会更有意义,因为该循环不是迭代产品,而是迭代供应商。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2011-12-06
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多