2011-04-08 73 views
2

我已經研究過這個問題,找不到解決方案。我的問題是,在我看來,我無法查看我的ViewModel的屬性(例如,Model.Supplier.SupplerName)。 Intellisense只允許我使用Model.Suppliers或Model.ToolTypes或Model.ToolTypesSuppliers。我無法獲取ViewModel中包含的每個模型的屬性。MVC 3 ViewModel模式問題(使用RAZOR)

視圖模型:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ToolOrder.Models 
{ 
    public class ToolTypeSupplierViewModel 
    { 
     public ToolTypeSupplierViewModel(IEnumerable<ToolType> tooltypes, IEnumerable<Supplier> suppliers, IEnumerable<ToolTypeSupplier> tooltypesuppliers) 
     { 
      this.ToolTypes = tooltypes; 
      this.Suppliers = suppliers; 
      this.ToolTypeSuppliers = tooltypesuppliers; 
     } 

     public IEnumerable<ToolType> ToolTypes { get; private set; } 
     public IEnumerable<Supplier> Suppliers { get; private set; } 
     public IEnumerable<ToolTypeSupplier> ToolTypeSuppliers { get; private set; } 

    } 
} 

控制器:

public ActionResult ListToolTypeSupplierOptions() 
{ 
    var _tooltypelist =_repository.FetchAllToolTypeOptions(); 
    var _supplierlist = _repository.FetchAllSupplierOptions(); 
    var _toolstypesupplierlist = _repository.FetchAllToolTypeSupplierOptions(); 

    return View(new ToolTypeSupplierViewModel(_tooltypelist, _supplierlist, _toolstypesupplierlist)); 
} 

查看:

@model IEnumerable<ToolOrder.Models.ToolTypeSupplierViewModel> 


<table> 
    <tr> 
     <th>Supplier</th> 
     <th>Tool TYpe</th> 
     <th>Created</th> 
     <th>Last Modified </th> 
    </tr> 

@foreach (var item in Model.) { 
    <tr> 
     <td> 
     </td> 
    </tr> 
} 

</table> 

任何幫助將是一個折騰或如果需要進一步澄清,我可以跟進。我很抱歉,如果這有點模糊,我一直在努力弄清楚爲什麼我不能拉動我的ViewModel中包含的每個模型的屬性。先謝謝你。

+1

您是否試圖在'foreach'語句中查看'Model'或者'item'的循環內的Intellisense屬性?在「foreach」的聲明中,您只能獲得Intellisense的收集類型。然後在循環內部,如果你做了'item.',那麼你應該看到你選擇的集合類型的屬性。 – 2011-04-08 05:33:11

+0

@munozca一個總的其他話題,但一個提示:我會使用一個Facade層調用你的3個倉庫方法。然後你的外觀層將返回一個數據傳輸對象到富客戶端:) – Elisabeth 2013-02-03 14:12:43

回答

1

你的問題是有點誤導,所以我會盡力回答這兩種情況。

  1. 正如我所看到的,您將單個實例ToolTypeSupplierViewModel傳遞給控制器​​的視圖,而不是枚舉。如果這不是錯誤,那麼在您看來,錯誤是 - 模型應該不是IEnumerable的ToolTypeSupplierViewModel,而是單個的ToolTypeSupplierViewModel。在這種情況下,您可以迭代Model.ToolTypes,供應商等。直接
  2. 如果錯誤不在視圖中,但在控制器和模型中應該是IEnumerable<ToolTypeSupplierViewModel>類型,那麼首先您應該直接在Model上迭代,因爲它本身是Enumerable。其項目是ToolTypeSupplierViewModel。在這種情況下,代碼將如ysrb建議
4

試試這個:

@foreach (var item in Model) { 
    @foreach (var supplier in item.Suppliers){ 
    <tr> 
     <td> 
      @supplier.SupplierName 
     </td> 
    </tr> 
    } 
} 

看來你需要通過它的IEnumerable的供應商循環。

+0

這將無法正常工作。 「供應商」不是該模型的財產。 – 2011-04-08 05:35:30

+0

@Xavier Poinas。固定 – ysrb 2011-04-08 05:39:08

+0

完美的工作。謝謝!奇怪的是,在這篇文章中[LINK](http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx)Stephen在他看來,沃克能夠鎖定ViewModel。任何我無法理解的原因? – munchrall 2011-04-08 12:23:30

0

嘗試@using ToolOrder.Models在您的Razor文件的頂部。

或在web.config中,找到命名空間部分,並添加它有

<namespaces> 
    ... 
    <add namespace="ToolOrder.Models" />