【问题标题】:MVC 3 ViewModel Pattern issue (using RAZOR)MVC 3 ViewModel 模式问题(使用 RAZOR)
【发布时间】:2011-08-01 05:45:29
【问题描述】:

我已经研究过这个问题,但找不到解决方案。我的问题是,在我看来,我无法查看我的 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 中的每个模型的属性。提前谢谢你。

【问题讨论】:

  • 您是想在foreach 语句中的Modelitem 的循环中查看Intellisense 属性吗?在foreach 的声明中,您只会获得针对集合类型的 Intellisense。然后在循环中,如果您执行了item.,那么您应该会看到您选择的任何集合类型的属性。
  • @munozca 一个总的其他话题,但一个提示:我会使用一个门面层来调用你的 3 个存储库方法。然后你的外观层会返回一个数据传输对象给富客户端:)

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


【解决方案1】:

试试这个:

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

看来你需要遍历供应商它是 IEnumerable。

【讨论】:

  • 效果很好。谢谢!奇怪的是,在这篇文章中LINKStephen Walker 能够在他的视图中链接 ViewModel。有什么我做不到的原因吗?
  • @munozca 在最后一个示例中,他只是使用 Single 对象作为 ViewModel (ProductViewModel),而您正在使用 IEnumerable 对象。如果您使用 ToolOrder.Models.ToolTypeSupplierViewModel 模型,您也可以这样做。
【解决方案2】:

您的问题在某种程度上具有误导性,因此我将尝试回答这两种情况。

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多