我将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);
}
}
答案 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();