Ошибка в MVC: ссылка на объект не указывает на экземпляр объекта
Я близок к тому, чтобы отказаться от этого приложения mvc на сегодня!!
Я следую учебнику MVC Music Store, и я застрял на странице 54.
это ошибка, я получаю:
6 ответов
тут Album
есть ArtistId
так как в этой строке вы вызываете Model.ArtistId
и если Album
не имеет этого свойства, на нем вы получите исключение нулевой ссылки. Это потому, что модель является сокращением для объекта, который строго типизирован для вашего представления, который, оказывается,Album
в вашем случае.
в приведенном выше коде нет места, где вы устанавливаете ViewData["художники"]. Вы устанавливаете это где угодно, так как это может быть вашей проблемой тоже.
редактировать
установите ViewData в действии, и он должен работать:
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()
};
ViewData["Artists"] = storeDB.Artists.ToList();
ViewData["Genres"] = storeDB.Genres.ToList();
return View(viewModel);
}
сначала вам нужно добавить свойства в модель представления, чтобы удерживать выбранного исполнителя и выбранный жанр:
public class StoreManagerViewModel
{
public Album Album { get; set; }
public int? SelectedArtistId { get; set; }
public List<Artist> Artists { get; set; }
public int? SelectedGenreId { get; set; }
public List<Genre> Genres { get; set; }
}
затем в Edit.aspx
вместо:
<%: Html.EditorFor(model => model.Album,
new { Artists = Model.Artists, Genres = Model.Genres }) %>
вы могли бы просто:
<%: Html.EditorForModel() %>
и в вашем редакторе шаблона ~/Views/Home/EditorTemplates/Album.ascx
:
<%@ 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>
и в вашем редакторе шаблона ~/Views/Home/EditorTemplates/StoreManagerViewModel
:
<%@ Import Namespace ="MvcMovies1" %>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcMovies1.ViewModels.StoreManagerViewModel>" %>
<%: Html.EditorFor(model => model.Album) %>
<p>
<%: Html.LabelFor(model => model.SelectedArtistId) %>
<%: Html.DropDownListFor(model => model.SelectedArtistId, new SelectList(Model.Artists, "ArtistId", "Name")) %>
</p>
<p>
<%: Html.LabelFor(model => model.SelectedGenreId) %>
<%: Html.DropDownListFor(model => model.SelectedGenreId, new SelectList(Model.Genres, "GenreId", "Name")) %>
</p>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
u r просто не установка ViewData["Artists"]
и ViewData["genres"]
Как я вижу из вашего метода действия.
убедитесь, что вы устанавливаете эти значения где-то во время жизни запроса, если вы хотите использовать их в ur view
была такая же ошибка при попытке запустить миграцию (update-database). имел 2 проекта, а именно ViewProject и DBcontextProject.
моя проблема заключалась в том, что я сделал ViewProject стартовым проектом и запустил миграцию на DBcontextProject.
решение было сделать DBcontextProject запуска проекта и выполнения миграции на DBcontextProject.
:
ссылка на объект не указывает на экземпляр объекта
устранение:
pubblic ActionResult yourDetails()
{
List<YourEntityName> PropertyName= new List<YourEntityName>();
list = db.PropertyName.ToList();
return View(list);
}
YourEntityName
означает Ваше имя таблицы i.e PassengerDetial
PropertyName
означает ваш класс pubblic свойство i.e PassengerDetails
pubblic Class PassengerDetailContext : DbContext
{
pubblic DbSet<PassengerDetail> passegerDetails {get;set;}
}
List<PassengerDetail> passegerDetails = new List<PassengerDetail>();
list = db.passegerDetails.ToList();
return View(list);