Я занимаюсь разработкой проекта на ASP.NET MVC5 и использую EF6.
У меня есть следующие классы с отношением один-ко-многим между Автором и Книгой, где Автор может иметь несколько Книг, а Книга может принадлежать только одному Автору:
Модели:
public class Author
{
public int AuthorId { get; set; }
public string Name { get; set; }
public ICollection<Book> Books { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string Name { get; set; }
public int? AuthorId { get; set; }
public Author Author { get; set; }
}
Я сгенерировал соответствующий контроллер с представлениями, используя EF, и теперь я хочу отобразить для каждого Автора соответствующие имена соответствующих книг в представлении Details.cshtml.
Контроллер :
// GET: Authors/Details/5
public async Task<ActionResult> Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Author author = await db.Authors.FindAsync(id);
if (author == null)
{
return HttpNotFound();
}
return View(author);
}
My Details.cshtml следующим образом:
@model MyApp.Models.Author
<div>
<h4>Author Info</h4>
<hr />
<dl class="dl-horizontal">
<dt style="font-size:20px">
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd style="font-size:20px">
@Html.DisplayFor(model => model.Name)
</dd>
<dt style="font-size:20px">
Associated Books
</dt>
@foreach (var item in Model.Books)
{
<dd>
@item.Name
</dd>
}
</dl>
</div>
Но это приводит к следующей ошибке:
Ссылка на объект не установлена для экземпляра объекта. исключение
Подробности: System.NullReferenceException: ссылка на объект не установлена в
экземпляр объекта.
Я следовал за ответом на этот похожий вопрос ( Как отобразить коллекцию в представлении проекта ASP.NET MVC Razor? ), но, очевидно, безуспешно. Может кто-нибудь сказать мне, что я делаю не так?