2012-10-15 4 views
2

여기 내 모델입니다. 여기에 그 코드는 다음과 같습니다표시 목록

@using MyModel.MyTools.Orders.SumOrder 
@model SumOrder 

@{ 
    ViewBag.Title = "View Invoice"; 
} 

<h2>View Invoice</h2> 

<table> 
    @foreach(var prod in Model.OCI) 
    { 
     <tr> 
      <td> 
       @prod.ClientLocation 
      </td> 
     </tr> 
     foreach (var orderItem in prod.Details) 
     { 
      <tr> 
       <td> 
        @orderItem.Product 
       </td> 
       <td> 
        @orderItem.ItemQuantity 
       </td> 
      </tr> 
     } 
    } 
</table> 

도시의 이름이지만, 다음 행에 나는이 얻을 제대로 표는 첫 번째 행 :

System.Collections.Generic.List 1[System.String] System.Collections.Generic.List을 1 [System.Int32]

내가 읽을 수있는 형식으로 반환 된 목록을 가져올 수없는 이유와이 문제를 해결하는 방법을 누군가에게 설명 할 수 있습니까? 문자열 목록이 문자열로 동일하지 않기 때문에

// group the cartItems according to location 
     List<ViewInvoice> ordersGrouped = cartItems.GroupBy(c => new 
      {c.ClientLocation}) 
      .OrderBy(c => c.Key.ClientLocation).Select(s => 
       new ViewInvoice() 
        { 
         ClientLocation = s.Key.ClientLocation, 
         Details = new List<ViewInvoice.DetailsGroup>() 
          { 
           new ViewInvoice.DetailsGroup() 
            { 
             Product = s.Select(p => p.Product).ToList(), 
             ItemQuantity = s.Select(p => p.ItemQuantity).ToList(), 
             DeliveryDate = s.Select(p => p.DeliveryDate).ToList(), 
             OrderDate = s.Select(p => p.OrderDate).ToList(), 
             OrderNumber = s.Select(p => p.OrderNumber).ToList(), 
             PackageType = s.Select(p => p.PackageType).ToList(), 
             Price = s.Select(p => p.Price).ToList(), 
             ProductSize = s.Select(p => p.ProductSize).ToList() 
            } 

          } 

        }).ToList(); 
+0

질문이 명확하지 않습니다. 컨트롤러를 보여줄 수 있습니까? Model.OCI가 ViewInvoice의 목록이라는 점을 감안할 때 정상적으로 작동합니다. 전체 오류를 알려주십시오. – Ammar

답변

2

좋아, 결국 내 문제를 해결했습니다. 나는 처음에 그 문제를 과도하게 생각했다. 모델을 간소화하고 간단한 논리를 추가했습니다. 여기

업데이트 된 모델 :

public class ViewInvoice 
{ 
    public string ClientLocation { get; set; } 
    public List<string> Product { get; set; } 
    public List<string> ProductSize { get; set; } 
    public List<string> PackageType { get; set; } 
    public List<DateTime> OrderDate { get; set; } 
    public List<DateTime> DeliveryDate { get; set; } 
    public List<int> OrderNumber { get; set; } 
    public List<decimal> Price { get; set; } 
    public List<int> ItemQuantity { get; set; } 
} 

모델의 그룹리스트를 사용하여 업데이트 된 코드 :

// group the cartItems according to location 
     List<ViewInvoice> ordersGrouped = cartItems.GroupBy(c => new 
      {c.ClientLocation}) 
      .OrderBy(c => c.Key.ClientLocation).Select(s => 
       new ViewInvoice() 
        { 
         ClientLocation = s.Key.ClientLocation, 
         Product = s.Select(p => p.Product).ToList(), 
         ItemQuantity = s.Select(p => p.ItemQuantity).ToList(), 
         DeliveryDate = s.Select(p => p.DeliveryDate).ToList(), 
         OrderDate = s.Select(p => p.OrderDate).ToList(), 
         OrderNumber = s.Select(p => p.OrderNumber).ToList(), 
         PackageType = s.Select(p => p.PackageType).ToList(), 
         Price = s.Select(p => p.Price).ToList(), 
         ProductSize = s.Select(p => p.ProductSize).ToList() 

        }).ToList(); 

업데이트 된 뷰 :

@using MyModel.MyTools.Orders.SumOrder 
@model SumOrder 

@{ 
    ViewBag.Title = "View Invoice"; 
} 

<h2>View Invoice</h2> 
@{ 
    int i = 0; 
} 
<table> 
    @foreach(var mod in Model.OCI) 
    { 
     var modCount = @mod.Product.Count(); 
     <tr> 
      <th>@mod.ClientLocation</th> 
     </tr> 
     <tr> 
      <th>Product</th> 
      <th>Price</th> 
     </tr> 
     foreach (var items in mod.Product) 
     { 
      <tr> 
       <td> 
        @mod.Product.ElementAtOrDefault(i) 
       </td> 
       <td> 
        @mod.Price.ElementAtOrDefault(i) 
       </td> 
      </tr> 
      i++; 
     } 

    } 
</table>  

이 용액 분명히 모델을 반복하면서 필요한 행이나 셀을 재생산 할 수 있습니다. 이 문제에 대해 지난 이틀 동안 러시아 룰렛 경기를했습니다.이것이이 문제에 직면 한 다른 사람들을위한 시간을 절약하길 바랍니다.

0

: 여기

내가 ViewInvoice 모델 그룹에 목록을 사용하는 코드입니다. 보고있는 것은 List 클래스의 ToString() 메서드가 반환하는 기본값입니다.

은 쉼표로 구분 표시 사용 목록에서 요소를 효율적으로 활용하려면 다음

string.Join(",", orderItem.Product.ToArray()) 
string.Join(",", orderItem.ItemQuantity.ToArray()) 

당신은 객체의 toString() 메소드가 호출 될 뭔가를 인쇄 할 때마다. List <> 클래스에 정의 된이 ToString() 메서드는 데이터 표시 방법을 알 수 없으므로 목록에서 둘 이상의 String 또는 int 또는 Date를 처리하는 방법을 확인할 수 있습니다. 예를 들어 모든 값 뒤에 <p>을 모든 값 앞에 추가하고 </p >을 추가 할 수 있습니다.

ClientLocation이 단순 유형이기 때문에 첫 번째 행이 올바르게 표시됩니다. 간단한 유형에 대한 자세한 내용은 simple types

+0

도움과 설명에 감사드립니다. – user1206480

1

모델 개체는 의미가 없습니다. 가격 및 수량과 같은 귀하의 각 자산이 왜 컬렉션입니까? 단일 주문 광고 항목 개체는 컬렉션이 아닌 각 속성에 대해 하나의 값만 갖습니다. 인보이스 오브젝트는 이미 여러 개의 Details 오브젝트를 차지하고 있지만, 하나의 Detail 오브젝트는리스트로서의 특성을 가져서는 안됩니다. 모든 재산에서 목록 <를 제거하십시오. 그러면 문제가 해결됩니다.

+0

그래, 그건 나 한테도 이해가 안되. 롤. 내가 올바르게 linq를 사용하여 그룹화 목록을 나타내는 방법을 알아 내려고 노력하고있어. 위의 linq 코드를 추가하겠습니다. – user1206480

+0

여전히 세부 개체의 각 속성이 특이 값 대신 모음으로 표시되는 이유를 설명하지 않았습니다. 나에게 그것은리스트가되어서는 안된다. – macsux

+0

글쎄, 처음에는 그런 식으로 해봤지만 내보기에는 속성에 액세스 할 수있는 것 같지 않았다. 예를 들어, 더 이상 ** var orderItem을 prod.Details에 쓸 수 없습니다. 이것은 뷰에 그룹화 된 목록을 표시하려고 시도한 첫 번째 시도이므로 코드에 간단한 논리가 누락되었다고 확신합니다. 나는 그것이 무엇인지 모른다. – user1206480