2013-07-22 6 views
0

Использование Orchard 1.6 MVC Я хотел отобразить список «поставщиков» на экране. Для каждого поставщика отобразите список своих продуктов и оставшееся количество.Использование словаря для отображения значений в VIEW

Supplier 1 
product 101 
product 102 

supplier 2 
product 103 
product 104 
product 105 

etc... 

Моего ViewModel

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; } 
     } 
    } 

Таким образом, в представлении Ive используется словарь для вывода имени поставщика. Но у меня возникают проблемы с выпуском продуктов для этого поставщика. Мой второй цикл 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] имеет некоторые недопустимые аргументы.

ответ

1

Поправьте меня, если я ошибаюсь, но в моем понимании, вы пытаетесь отобразить

  1. ProductCode, который находится в QBProductRecord класса и этот класс используется как часть словаря (в котором ключ существо используется ProductId) в вашем классе модели SuppliersOrderVM.
  2. Quantity, что является собственностью в классе Product.

Тогда вы должны использовать следующий код. Ошибка в вашем коде заключается в том, что вы пытаетесь использовать 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> 
+0

спасибо за ответ jonni – John

0

Что эта линия означает делать ?:

Model.Products[product.Products] 

Если я после вашей модели иерархии правильно, Model является экземпляром SuppliersOrderVM. Это означает, что Model.Products является экземпляром Dictionary<int, QBProductRecord>. Чтобы получить доступ к элементу из этого Dictionary, вам необходимо проиндексировать его с помощью int. Однако product.Products не является int, это List<ProductInfo>.

Вы хотели бы добавить еще один цикл для List<ProductInfo>, чтобы получить доступ к ProductId собственности на каждый элемент в нем? Что-то вроде этого ?:

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

Трудно точно сказать, что вы пытаетесь сделать. Модельная иерархия немного неудобна, так что многие вещи называются «продуктом».

+0

@ Model.Products [product.Products] .ProductCode <предназначен для вывода продукта, но у меня нет правильного синтаксиса. Информация о поставщиках содержит поставщиков и всю их продукцию. Я получил доступ к поставщикам, теперь мне нужно выводить свои продукты ... любые идеи? спасибо за ответ – John

+0

@John: Он должен быть в цикле, чтобы использовать значения из 'product.Products', как в опубликованном ответе. Каждый объект 'SupplierInfo' в' product' внутри имеет список объектов 'ProductInfo'. Поэтому вы не можете передать этот список в словарь 'Model.Products'. Вы должны перебрать этот список и передать каждый идентификатор в словарь. Вероятно, было бы намного больше смысла, если вы переименуете переменную 'product' в своем цикле в' поставщикInfo', сделав ее 'foreach (var supplierInfo в Model.SupplierInformation)', поскольку этот цикл не выполняет итерацию по продуктам, а более поставщиков. – David

+0

ok cool ... спасибо за ответ david – John

Смежные вопросы