【问题标题】:Accessing list properties in the typed view from a Viewmodel从 Viewmodel 访问类型化视图中的列表属性
【发布时间】:2011-05-12 15:21:23
【问题描述】:

我有一个主视图模型,以下两个列表来自两个不同的数据库表,

public IEnumerable <Customer> SomeCustomer { get; set; }
public IEnumerable <CustomerSite> CustomerSites { get; set; }

在我的控制器中

public ViewResult Index()
{
    masterViewModel sitesModel = new masterViewModel();
    return View(sitesModel);
}

然后在我看来我写

@model IEnumerable<trsDatabase.Models.masterViewModel>

如果我尝试使用 for each 语句访问模型

@foreach (var customer in Model)

当我输入@customer 时。它只会让我访问两个列表,而不是列表中的单个属性。

我认为我可以使用例如

@customer.CustomerSites.UnitNo

但我能走的最远是

@customer.CustomerSites

这显然不会让我访问列表中的各个属性

有人对我在这里做错了什么有任何想法吗?我需要从控制器中的视图模型中定义属性吗? (我认为不是)

更新

我的视图模型中有以下代码,

namespace trsDatabase.Models
{
    public class masterViewModel
    {
    public IEnumerable <Customer> Customers { get; set; }
    public IEnumerable <CustomerSite> CustomerSites { get; set; }
    }
}

然后在控制器中如下,

public ViewResult Index()
{
    masterViewModel sitesModel = new masterViewModel();
    return View(sitesModel);
}

然后我将视图声明更改为

@model trsDatabase.Models.masterViewModel

这使我可以完美地从视图访问属性,但是它会在 foreach 循环中引发错误,因为当视图继承模型而不是 Ienumerable 列表时无法使用它,我是否需要更改在视图中呈现列表并使用除 foreachloop 之外的其他内容的语法?

【问题讨论】:

    标签: asp.net-mvc viewmodel ienumerable


    【解决方案1】:

    我认为您需要另一个循环,因为 CustomerSites 是一个集合:

    @foreach (var customer in Model)
        foreach (var site in customer.CustomerSites)
            @site.UnitNo
    

    评论后编辑

    创建一个 ViewModel 类:

    class ViewModel
    {
        public IEnumerable<Customer> Customer { get; set; }
    }
    

    将其填充到控制器中并将其传递给View() 函数。 更改要键入的视图 (@model ViewModel)。 然后在内部查看您的Model 属性将是ViewModel 类型,您可以通过@Model.Customers 访问客户集合

    【讨论】:

    • 非常感谢 Jakub 已经让它工作了,现在只需要弄清楚如何使 viewmodel 可枚举,因为视图需要一个 Ienumerable。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多