MVC 3 ViewModel Pattern问题(使用RAZOR)

时间:2011-04-08 05:26:54

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3 viewmodel

我已经研究过这个问题但无法找到解决方案。我的问题是,在我看来,我无法查看我的ViewModel的属性(例如,Model.Supplier.SupplerName)。 Intellisense只允许我使用Model.Suppliers,或Model.ToolTypes或Model.ToolTypesSuppliers。我无法获得我在ViewModel中包含的每个模型的属性。

视图模型:

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中包含的每个Model的属性。提前谢谢。

3 个答案:

答案 0 :(得分:4)

试试这个:

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

您似乎需要遍历供应商,这是IEnumerable。

答案 1 :(得分:1)

你的问题有点误导,所以我会尝试回答这两种情况。

  1. 正如我所见,您将ToolTypeSupplierViewModel的单个实例从控制器传递给您的视图,而不是可枚举的。如果这不是错误,那么错误就在您的视图中 - 模型不应该是ToolTypeSupplierViewModel的IEnumerable,而是单ToolTypeSupplierViewModel。在这种情况下,您可以直接迭代Model.ToolTypes,Suppliers等。
  2. 如果错误不在视野中,但在控制器和模型中应该是IEnumerable<ToolTypeSupplierViewModel>类型,那么首先你应该直接迭代模型,因为它是可枚举的本身。其项目为ToolTypeSupplierViewModel。在这种情况下,代码将为ysrb建议

答案 2 :(得分:0)

尝试Razor文件顶部的@using ToolOrder.Models

或在web.config中,找到名称空间部分并将其添加到那里

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