I'm close to giving up this mvc app for today!
I am following the Mvc Music Store Tutorial and I am stuck on page 54.
this is the error i get:
System.NullReferenceException: The object reference is not set to an instance of the object.
An error in the third paragraph block (dropdownlist) in the following code:
<%@ Import Namespace ="MvcMovies1" %> <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcMovies1.Models.Album>" %> <p> <%: Html.LabelFor(model => model.Title) %> <%: Html.TextAreaFor(model => model.Title) %> <%: Html.ValidationMessageFor(model => model.Title) %> </p> <p> <%: Html.LabelFor(model => model.Price) %> <%: Html.TextAreaFor(model => model.Price) %> <%: Html.ValidationMessageFor(model => model.Price) %> </p> <p> <%: Html.LabelFor(model => model.AlbumArtUrl) %> <%: Html.TextAreaFor(model => model.AlbumArtUrl) %> <%: Html.ValidationMessageFor(model => model.AlbumArtUrl) %> </p> <p> <%: Html.LabelFor(model => model.Artist) %> <%: Html.DropDownList("ArtistId", new SelectList(ViewData["Artists"] as IEnumerable, "ArtistId", "Name", Model.ArtistId)) %> </p> <p> <%: Html.LabelFor(model => model.Genre) %> <%: Html.DropDownList("GenreId", new SelectList(ViewData["Genres"] as IEnumerable, "GenreId", "Name", Model.GenreId)) %> </p> <div> <%: Html.ActionLink("Back to List", "Index") %> </div>
This ascx file is contained in the Edit.aspx file:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcMovies1.ViewModels.StoreManagerViewModel>" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Edit </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <form id="form1" runat="server"> <h2>Edit</h2> <% using (Html.BeginForm()) { %> <%: Html.ValidationSummary(true)%> <fieldset> <legend>Edit Album</legend> <%: Html.EditorFor(model => model.Album, new { Artists = Model.Artists, Genres = Model.Genres }) %> <p><input type="submit" value="Save" /></p> </fieldset> <% } %> </form> </asp:Content>
I understand there is a lot of code, but if someone sees something obvious that I am doing wrong, I would be very grateful.
EDIT
StoreManagerController.cs (Change)
public ActionResult Edit(int id) { var viewModel = new StoreManagerViewModel { Album = storeDB.Albums.SingleOrDefault(a => a.AlbumId == id), Genres = storeDB.Genres.ToList(), Artists = storeDB.Artists.ToList() }; return View(viewModel); }
Andddd..StoreManagerViewModel.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using MvcMovies1.Models; namespace MvcMovies1.ViewModels { public class StoreManagerViewModel { public Album Album { get; set; } public List<Artist> Artists { get; set; } public List<Genre> Genres { get; set; } } }
Again, I understand that I called it MvcMovies1, it was a typo, but everything was marked accordingly.