2012-09-07 121 views
1

我想在我的視圖中檢索表格的一個單元格中的幾個項目。我有幾個模型,產品,包(作爲類別),訂單和OrderDetail。我想要實現我想要的,我應該使用我的模型中的數據創建視圖模型,但我不知道如何執行此操作以及我應該綁定哪些數據。如何從多個模型設置Viewmodel?

這是我的觀點

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.OrderId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Username)   
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ClientID)   
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.SiteNumber) 
     </td> 
     <td> 
      @if (item.Pack == null) 
      { 
        <ul> 
         @foreach (var tmp in item.????) //PRODUCT 
         { 
          <li>Html.DisplayFor(modelItem => tmp.Name) </li> 
         } 
        </ul> 
      } 
      else 
      {     
        <ul> 
         @foreach (var tmp in item.????) //PACK 
         { 
          <li>Html.DisplayFor(modelItem => tmp.Name) </li> 
         } 
        </ul>      
      } 
     </td> 

     <td> 
     @{ 
       if (item.Pack == null) 
       { 
         <ul> 
          @foreach (var tmp in item.????) // PRODUCT 
          { 
           <li>Html.DisplayFor(modelItem => tmp.UnitPrice) 
           </li> 
          } 
         </ul> 
       } 
       else 
       {      
         <ul> 
           @foreach (var tmp in item.????) //PACK 
           { 
            <li> 
            @Html.DisplayFor(modelItem => tmp.UnitPricePack) 
            </li> 
           } 
         </ul> 
       } 
} 

     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Quantity) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Total) 
     </td>   
     <td> 
      @Html.DisplayFor(modelItem => item.OrderDate) 
     </td> 
    </tr> 

我想我的表看起來像這樣結尾:

enter image description here

再次我的問題,我怎樣才能創建一個視圖模型中檢索數據我查看和匹配我的@foreach條件裏面馬錶...我不知道我是否足夠清楚......本文關注this one。實際上,我做了什麼會讓我錯誤返回錯誤,我不知道如何設置我的viewmodel,我需要綁定哪些數據以及如何綁定。感謝您的幫助,你的意見,我採取一切

+0

什麼是您的觀點的實際模型? 'IList '? –

+0

在我看來我現在打電話給@Model IEnumerable Alternative

回答

1

你不一定需要一個新的ViewModel,Order有你所需要的。您的模型將成爲訂單列表。

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.OrderId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Username) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ClientID) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.SiteNumber) 
     </td> 
     <td> 
      <ul> 
       @foreach (var o in item.OrderDetails) 
       { 

        if (o.Pack == null) 
        { 
        <li>@Html.DisplayFor(modelItem => o.Product.Name) </li> //PRODUCT 
        } 
        else 
        { 

        <li>@Html.DisplayFor(modelItem => o.Pack.Name) </li> // PACK 

        } 
       } 
      </ul> 
     </td> 
     <td> 
       <ul> 
        @foreach (var o in item.OrderDetails) 
        { 

         if (o.Pack == null) 
         { 
         <li>@Html.DisplayFor(modelItem => o.UnitPrice) </li> //PRODUCT 
         } 
         else 
         { 
         <li>@Html.DisplayFor(modelItem => o.UnitPricePack) </li> //PACK 
         } 
        } 
       </ul> 
     </td> 
     <td> 
      <ul> 
       @foreach (var o in item.OrderDetails) 
       { 
        <li>@Html.DisplayFor(modelItem => o.Quantity)</li> 
       } 
      </ul> 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Total) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.OrderDate) 
     </td> 
    </tr> 
} 

根據您的更新更新:

你還在試圖通過ORDERDETAILS而不是訂單

,而不是這個集合:

 var user = from m in db.OrderDetails 
        select m; 

今(假設你有Orders表):

public ActionResult Index(string searchSite, string searchString) 
    { 

     var user = from m in db.Orders 
        select m; 

     if (!String.IsNullOrEmpty(searchString)) 
     { 
      user = user.Where(s => s.ClientID.Contains(searchString));     
     } 

     if (!String.IsNullOrEmpty(searchSite)) 
     { 
      user = user.Where(c => c.SiteNumber.Contains(searchSite)); 
     } 
      return View(user); 
    } 
+0

我叫@model IEnumerable 而不是OrderDetail是正確的? – Alternative

+0

沒錯,控制器操作有問題。看起來您仍在查詢數據庫中的orderdetails並將其傳遞給視圖而不是命令。 –

+0

我會嘗試將OrderDetails更改爲訂單,但注意到更改,我將編輯我的帖子以上傳我的控制器。但我只是一個提供按字符串搜索的方法。 – Alternative

1

我會建議使用`AutoMapper',你可以嘗試

public class A{ 
public string FirstName{get;set;} 
} 

public class B{ 
public string LastName{get;set;} 
} 

現在創建一個視圖模式

public class VModel{ 
public string FirstName{get;set;} 
public string LastName{get;set;} 
} 

,並在那裏你希望他們收斂使用自動映射器像

Mapper.CreateMap<A,VModel>(); 
Mapper.CreateMap<B,VModel>(); 

var ObjectOfClassA= new A{FirstName="John"}; 
var ObjectOfClassB= new A{LastName="Smith"}; 

VModel _model = Mapper.Map<A,VModel>(ObjectOfClassA); 
_model = Mapper.Map<B,VModel>(ObjectOfClassB); 

訪問它像

_model.FirstName;//should give you john 
_model.LastName;//should give you smith 
+0

謝謝,但我不想使用extern庫,我的應用程序可能會被其他人修改。但在最後一種情況下,我會嘗試它,它可能對我有用,所以謝謝無論如何,我不知道這個工具 – Alternative