我现在超级累了,可能已经犯了一个大错误。 我正在使用ViewModel来获取1个主模型类中的所有模型。到目前为止,我只做了新闻并且已经遇到了错误..
见错误:
NullReferenceException:未将对象引用设置为的实例 宾语。 AspNetCore._Views_Home_Index_cshtml + d__21.MoveNext()in Index.cshtml + @foreach(Model.Newss中的新闻新闻)
(是的,我的命名搞砸了,但希望先看到基础工作)。
反正: News.cs:
namespace UKSF.Models
{
public class News
{
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public string Publisher { get; set; }
}
}
MainViewModels.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace UKSF.Models
{
public class MainViewModel
{
public List<News> Newss { get; set; }
}
}
index.cshtml:
@model UKSF.Models.MainViewModel
@{
ViewData["Title"] = "Home Page";
}
@foreach(News news in Model.Newss)
{
@news.Title
}
修改 正如你们所指出的,错误是由于我没有初始化它,我相信我已经在Controller页面中完成了。 现在:
public IActionResult Index()
{
MainViewModel model = new MainViewModel();
model.Newss = new List<News>();
return View(model);
}
答案 0 :(得分:2)
您是否在使用之前初始化了Newss
集合?如果没有,它将为null,并且当您尝试在foreach循环中迭代它时将抛出NullReferenceException
。
考虑在构造函数中初始化它:
public class MainViewModel
{
public List<News> Newss { get; set; }
public MainViewModel()
{
// This will initialize the collection when a new instance of
// your model is created
Newss = new List<News>();
}
}
或使用自动属性初始化程序内联:
// This will set the default value to a new list instead of null
public List<News> Newss { get; set; } = new List<News>();
答案 1 :(得分:0)
初始化您的列表
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace UKSF.Models
{
public class MainViewModel
{
public MainViewModel()
{
Newss = new List<News>();
}
public List<News> Newss { get; set; }
}
}
答案 2 :(得分:0)
您从未初始化列表。创建一个构造函数并在那里初始化它。
Newss = new List<News>();
编辑:或者你可以像Rion的回答那样在线进行。