asp.net mvc viewmodel获取getenumerator的错误公共定义

时间:2017-07-26 02:14:31

标签: asp.net-mvc

我可以将我的产品模型设为我的视图。但我需要在ViewModel中传递它,以便我可以与来自多个模型的数据进行交互。当我将我的视图绑定到ProductPageViewModel时,我得到了#E;没有GetEnumerator的公共定义"错误。我已经尝试了各种IEnumerable选项,但找不到合适的组合。

我包含了视图绑定到模型时工作的控制器和视图。

完整错误是

  

CS1579:foreach语句不能对JaniesWebLive.ViewModel.ProductPageViewModel'类型的变量进行操作。因为    JaniesWebLive.ViewModel.ProductPageViewModel'不包含' GetEnumerator'

的公开定义

@foreach (var item in Model)

处触发

Products.cs

public class Products 
{
    [Key]
    public int WpId { get; set; }
    public string Category { get; set; }
    public string WpProductId { get; set; }
    public string ProdDescShort { get; set; }
    public string ProdDescLong { get; set; }
    public string ProductMedium { get; set; }
    public decimal? Price1 { get; set; }
}

ProductPageViewModel.cs

public class ProductPageViewModel
{
    public IEnumerable<Products> Products { get; set; }
    public Contact Contacts { get; set; }
    public string Message { get; set; }
    /*more models to be added */
}

ProductsController.cs

public class ProductsController : Controller
{
    private ApplicationDbContext db = new ApplicationDbContext();
    public ActionResult ShortList(string prodname)
    {
        var products = db.DbProducts.Where(m => m.Category == "homepage");
        var model = new ViewModel.ProductPageViewModel
        {
            Products = products,
            Message = "Thanks for your business! "
            /* more models to be added  */
        };
        return View(model);
    }
}

ShortList.cshtml

@model IEnumerable<JaniesWebLive.ViewModel.ProductPageViewModel>

   @foreach (var item in Model)
    {
        <div class="row">
            <div class="col-md-4 col-sm-6 col-xs-12">
            <p><img class="product-image" src=@Html.DisplayFor(modelItem => item.ProductMedium) /></p><br />
            <h3>@Html.DisplayFor(modelItem => item.WpProductId)</h3>
            <h5>@Html.DisplayFor(modelItem => item.Price1)</h5>
            <h6>@Html.DisplayFor(modelItem => item.ProdDescShort)</h6>
            <p class="text-center">@Html.DisplayFor(modelItem => item.ProdDescLong)</p>
            <p>
                <button class="text-right btn btn-link">SHORT LIST</button>
            </p>
        </div>
    </div>
 }

工作控制器和视图

public ActionResult LongList(string prodname)
{
    var model = db.DbProducts.Where(m => m.Category == "homepage");
    return View(model);
}

LongList.cshtml

@model JaniesWebLive.Models.Products

@foreach (var item in Model)
{
    <div class="row">
        <div class="col-md-4 col-sm-6 col-xs-12">
            <p><img class="product-image" src=@Html.DisplayFor(modelItem => item.ProductMedium) /></p>
            <h3>@Html.DisplayFor(modelItem => item.WpProductId)</h3>
            <h5>@Html.DisplayFor(modelItem => item.Price1)</h5>
            <h6>@Html.DisplayFor(modelItem => item.ProdDescShort)</h6>
            <p class="text-center">@Html.DisplayFor(modelItem => item.ProdDescLong)</p>
            <p>
                <button class="text-right btn btn-link">LONG LIST</button>
            </p>
        </div>
    </div>
}

1 个答案:

答案 0 :(得分:0)

您需要将视图更改为

@model JaniesWebLive.ViewModel.ProductPageViewModel

   @foreach (var item in Model.Products )
    {
        <div class="row">
            <div class="col-md-4 col-sm-6 col-xs-12">
            <p><img class="product-image" src=@Html.DisplayFor(modelItem => item.ProductMedium) /></p><br />
            <h3>@Html.DisplayFor(modelItem => item.WpProductId)</h3>
            <h5>@Html.DisplayFor(modelItem => item.Price1)</h5>
            <h6>@Html.DisplayFor(modelItem => item.ProdDescShort)</h6>
            <p class="text-center">@Html.DisplayFor(modelItem => item.ProdDescLong)</p>
            <p>
                <button class="text-right btn btn-link">SHORT LIST</button>
            </p>
        </div>
    </div>
 }

因为upr视图模型是一个包含list属性的对象,你需要迭代属性而不是整个模型