MVC6 / ASP.net ViewModel问题(对象引用未设置为对象的实例)

时间:2017-03-22 15:47:20

标签: c# asp.net asp.net-mvc

我现在超级累了,可能已经犯了一个大错误。 我正在使用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);
}

3 个答案:

答案 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的回答那样在线进行。