c# - 无法访问 ViewModel 的属性

标签 c# asp.net-mvc

我正在尝试制作一个将与主页 View 一起使用的 ViewModel。 ViewModel 具有如下一些属性:

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

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

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

        homeVM.NewsItems = newsReader.GetNewsItems();

        return View(homeVM);
    }

然后在 View 中我尝试这样做:

   @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);
        }

View 如下:

@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>

最佳答案

错误似乎表明 View 指向不同的 HomeViewModel类型,我假设没有 NewsItems属性(property)。

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

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

更新

根据您的更新,我可以看到您的 View 确实指向了不同的类型; IEnumerable<HomeViewModel>而不是 HomeViewModel .

关于c# - 无法访问 ViewModel 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30709111/

相关文章:

c# - 指定的 LINQ 表达式包含对与 c# 中的不同上下文错误关联的查询的引用

asp.net-mvc - 如何避免 ASP.NET MVC Html Helpers(如 RouteLink)中的默认 URL 编码

asp.net-mvc - 带 ActionName 的 MVC 路由;发现多个与请求匹配的操作

c# - 如何使用输入类型=日期的 Html.TextBoxFor?

c# - 能否从 ActionFilter 中获取方法中使用的参数值?

c# - 有人可以给我一些关于 WPF 的建议吗?

c# - 不同windows azure部署环境下的日期格式不同

C#:如何实现智能缓存

javascript - 需要一些 ReactJS 的压力测试示例

c# - SignalR 在子域上协商 404