我正在尝试创建一个将与主页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
我哪里出错了,我该如何解决?
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>
答案 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)
}