我是否必须在 Controller 中操作模型数据才能传递给 View?

Do I have to manipulate the Model data in Controller to pass to View?

我有两个表:缓存(日期(时间戳)和站点)和 SiteContent,我在其中存储单词及其计数。一个站点有许多 SiteContents 条目。我想将 SiteContents 发送到 View。

缓存:

        [Required]
        public string Site { get; set; }
        [Required]
        public DateTime Date { get; set; }
        public virtual ICollection<Cash> SiteContent { get; set; }

网站内容:

        [Required]
        public int CashId { get; set; }
        public virtual Cache Site { get; set; }
        [Required]
        public string Word { get; set; }
        [Required]
        public uint Count { get; set; }

控制器代码:

public IActionResult Index()
        {
            //Console.WriteLine(_context.Caches.ToArray()[0].Site);
            //Console.WriteLine(_context.SiteContents.ToArray()[0].Word);
            //Console.WriteLine(_context.SiteContents.ToArray()[0].Site.Site);
            return View(_context.SiteContents.ToList());
        }

查看代码:

@using ParserWeb.Models
@model IEnumerable<SiteContent>
@{
    ViewData["Title"] = "Home Page";
}


<table class="table">
    @foreach (SiteContent c in Model)
    {
            <tr> <td>@c.Site.Date</td> <td>@c.Site.Site</td> <td>@c.Word</td> <td>@c.Count</td> </tr>
    }
</table>

为什么代码只有在我取消注释时才有效?否则有

System.NullReferenceException:“对象引用未设置到对象的实例。”

@foreach (SiteContent c in Model)
{
        <tr> <td>@c.Site.Date</td> <td>@c.Site.Site</td> <td>@c.Word</td> <td>@c.Count</td> </tr>
}

您想使用 @c.Site.Date 但您不包括 Site

Site = null 而您想使用 Site.Date,(属性 of null)这就是异常的原因。

答案:

return View(_context.SiteContents.Include(s => s.Site).ToList());