【问题标题】:View with ViewModel使用 ViewModel 查看
【发布时间】:2014-11-18 19:46:10
【问题描述】:

我有一个包含其他 ViewModel 的 ViewModel

public class AllProductsViewModel
{
    public ICollection<ProductSearchViewModel> ProductSearch { get; set; }

    public ICollection<ProductRentViewModel> ProductRent { get; set; }

    public ICollection<ProductBuyViewModel> ProductBuy { get; set; }
}

我的控制器是:

    public ActionResult Index()
    {
        var listOfProductsBuy = db.ProductsBuy.Select(x => new ProductBuyViewModel
        {

            Id = x.Id,
            Title = x.Title,
            MasterImageUrl = x.Images.FirstOrDefault().Url,
            Price = x.Price,
            Values = x.Value,

        }).ToList();

        var listOfProductsRent = db.ProductsRent.Select(y => new ProductRentViewModel
            {
                Id = y.Id,
                Title = y.Title,
                MasterImageUrl = y.ImagesRent.FirstOrDefault().Url,
                Price = y.Price,
                Values = y.Value,
            }).ToList();

        var listOfProductsSearch = db.ProductSearches.Select(z => new ProductSearchViewModel
        {
            Id = z.Id,
            Title = z.Title,
            MasterImageUrl = z.ImagesSearch.FirstOrDefault().Url,
            Price = z.Price,
            Values = z.Value,
        }).ToList();

        var viewModel = new AllProductsViewModel { ProductBuy = listOfProductsBuy, ProductRent = listOfProductsRent, ProductSearch = listOfProductsSearch };
        return View(viewModel);
    }
}

我的观点:

@model IEnumerable<RealEstateMarket.ViewModels.AllProductsViewModel>
@{
    ViewBag.Title = "Home Page";
}

<br />
<div class="row">
        <div class="col-md-3">
            @foreach (var item in Model)
            {
                <h3>@item.ProductBuy.Select(x => x.Title)</h3>
                <div>
                    <img height="100" width="120" class="thumbnail" src="@item.ProductBuy.Select(x => x.MasterImageUrl )" />
                </div>
                <h3>@item.ProductBuy.Select(x => x.Price) @item.ProductBuy.Select(x => x.Values.Currency)</h3>
            }        
        </div>
</div>

想取ProductBuyViewModel、ProductRentViewModel、ProductSearchViewModel的字段 当我启动此代码时,我收到错误消息:传递到字典中的模型项的类型为“RealEstateMarket.ViewModels.AllProductsViewModel”,但该字典需要类型为“System.Collections.Generic.IEnumerable`1[RealEstateMarket. ViewModels.AllProductsViewModel]'。

【问题讨论】:

  • 尝试将 ienumerable 更改为 List
  • 您的视图期望多个 AllProductsViewModel 作为其模型,但您只传递一个 AllProductsViewModel 给它。您需要问自己您的视图应该处理多个还是单个AllProductsViewModel

标签: asp.net-mvc-3 asp.net-mvc-4 razor viewmodel


【解决方案1】:

改变这个

 @model IEnumerable<RealEstateMarket.ViewModels.AllProductsViewModel>

 @model RealEstateMarket.ViewModels.AllProductsViewModel

然后你就可以访问你的列表了

    <div class="col-md-3">
        @for (int index=0;index<Model.ProductSearch.Count();index++)
        {
            <h3>@Model.ProductSearch[index].Title</h3>
            <div>
                <img height="100" width="120" class="thumbnail" src="@Model.ProductSearch[index].MasterImageUrl )" />
            </div>
            <h3>@Model.ProductSearch[index].Price @Model.ProductSearch[index].Values.Currency)</h3>
        }        
    </div>

【讨论】:

  • 如果我改变这个,那么我就不能使用 foreach 和 Model
  • 我更新了答案,如果你使用普通的“for”会更好
猜你喜欢
  • 2012-08-21
  • 2016-11-27
  • 2010-12-31
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多