2011-04-08 77 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" />