Model。[some model] .ToList()返回null

时间:2016-05-16 14:30:53

标签: asp.net5

我将Repository作为我的模型传递给视图,在View中,使用Repository我在数据库中插入一个条目,我可以看到DB中的条目但是当我使用时getFans()应用程序崩溃时出现以下错误:

An unhandled exception occurred while processing the request.

ArgumentNullException: Value cannot be null.
Parameter name: constructor
System.Linq.Expressions.Expression.New(ConstructorInfo constructor, IEnumerable`1 arguments)

错误发生在这一行:     return _context.Fans.ToList();

我有这个Repository类:

public class FanBookRepository : IFanBookRepository
{
    private ApplicationDbContext _context;
    public FanBookRepository(ApplicationDbContext context)
    {
        _context = context;
    }

    public ICollection<Fan> getFans()
    {
        return _context.Fans.ToList<Fan>();
    }

    public void addFan(Fan fan)
    {
        _context.Fans.Add(fan);
        _context.SaveChanges();
    }
}

我将此视图命名为Index:

@model Shauli_Blog.Models.FanBookRepository
@{
    Model.addFan(new Fan("Asaf", "Karavani", System.DateTime.Now, "Male", new DateTime(1996, 10, 7)));

}

@{
    var fans = Model.getFans();

    foreach (var fan in fans)
    {
        <h1>@fan.FirstName</h1>
    }
}

此控制器:

public class FanBookController : Controller
{
    IFanBookRepository _repository;

    public FanBookController(IFanBookRepository repository)
    {
        _repository = repository;
    }

    // GET: /<controller>/
    public IActionResult Index()
    {
        return View(_repository);
    }
}

1 个答案:

答案 0 :(得分:0)

将存储库传递给视图是不对的。创建一个类,它将是视图的视图模型,它接收粉丝列表。

public class IndexViewModel
{
    public IList<Fan> Fans { get; set; }
}

public IActionResult Index()
{
    var viewModel = new IndexViewModel();

    viewModel.Fans = _repository.getFans();

    return View(viewModel);
}

您的想法是通过使用视图模型远离数据源来分离视图中使用的数据。这样,如果粉丝列表来自另一个来源,比如数组而不是来自_repoistory,那么它对视图无关紧要,因为这不需要改变。这完全是为了降低视图和数据源之间的内聚力。

使用

引发的异常回到您的问题

_context.Fans.ToList();

您确定_context.Fans不是NULL吗?也许您应该将功能更改为

return _context.Fans != null ? _context.Fans.ToList() : Enumerable.Empty<Fan>().ToList();