无法访问ViewModel的属性

时间:2015-06-08 12:25:01

标签: c# asp.net-mvc

我正在尝试创建一个将与主页View一起使用的ViewModel。 ViewModel有一些这样的属性:

public class HomeViewModel
{
    public IEnumerable<NewsItem> NewsItems { get; set; }
}

在Home Controller中,我正在创建一个HomeViewModel实例,然后在将HomeViewModel发送到Home View之前设置它们的属性,如下所示:

    public ActionResult Index()
    {
        HomeViewModel homeVM = new HomeViewModel();
        NewsReader newsReader = new NewsReader();

        homeVM.NewsItems = newsReader.GetNewsItems();

        return View(homeVM);
    }

然后在视图中我试图这样做:

   @foreach(var item in Model.NewsItems)
    {
        @Html.Display(m => m.Title)
    }

但是我得到了:

ViewModels.HomeViewModel does not contain a definition for NewsItems

我哪里出错了,我该如何解决?

enter image description here

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Site.Services.News;

using Site.Models;
using Site.ViewModels;
using Site.DAL;
using Site.Services.Products;

namespace Site.Controllers
{
    public class HomeController : Controller
    {
        private DashboardContext db = new DashboardContext();

        public ActionResult Index()
        {
            HomeViewModel homeVM = new HomeViewModel();
            NewsReader newsReader = new NewsReader();

            homeVM.NewsItems = newsReader.GetNewsItems();

            //NewsReader newsReader = new NewsReader();
            //var newsItems = newsReader.GetNewsItems();


            return View(homeVM);
        }

继承人的观点:

@model IEnumerable<Site.ViewModels.HomeViewModel>
@{
    ViewBag.Title = "Home";
}

<div class="jumbotron">
    <p class="lead">Overview</p>
</div>

<div class="row">
    <div class="col-md-4">
        <h2>Customers</h2>
    </div>
    <div class="col-md-4">
        <h2>Sales</h2>
        <p>@Html.ActionLink("View »", "Index", "SalesRecords", null, new { @class = "btn btn-primary" })</p>
    </div>
    <div class="col-md-4">
        <h2>News</h2>

        @foreach(var item in Model.NewsItems)
        {
            @Html.Display(item.Title)
        }

        <p>@Html.ActionLink("Read »", "Index", "News", null, new { @class = "btn btn-primary" })</p>
    </div>
</div>

3 个答案:

答案 0 :(得分:2)

该错误似乎表明该视图指向不同的HomeViewModel类型,我认为该类型没有NewsItems属性。

视图的@Model声明似乎指向嵌套类:ViewModels.HomeViewModel

但是您在控制器中使用的HomeViewModel对象不是嵌套类型。

<强>更新

根据您的更新,我可以看到您的视图确实指向了另一种类型; IEnumerable<HomeViewModel>而不是HomeViewModel

答案 1 :(得分:1)

您的观点是

@model IEnumerable<Site.ViewModels.HomeViewModel>

但你的控制器发送

HomeViewModel homeVM = new HomeViewModel();
return View(homeVM);  

即它们的类型不同

尝试将您的观点更改为

@model Site.ViewModels.HomeViewModel

答案 2 :(得分:0)

更改:

@foreach(var item in Model.NewsItems)
{
    @Html.Display(m => m.Title)
}

@foreach(var item in Model.NewsItems)
{
    @Html.Display(m => item.Title)
}