Выделите список и выберите список | ссылка на объект не указывает на экземпляр объекта.
- Привет ! Я пытаюсь реализовать список выбора (DropDownListFor) и список множественного выбора (ListBoxFor) в ASP.NET(MVC5), и при отправке формы я получаю исключение "ссылка на объект не установлена на экземпляр объекта". Я нашел кучу статей о переполнении стека, которые на самом деле не очень мне помогли. Я много чего перепробовал, но не слишком удачно.
Вот фотография исключения: [Исключением Цены,
кликни меня!]
Что я уже пробовал:
Контроллер:
public ActionResult New() { List<string> availableImages = new List<string>(); //here i an getting the path for all the available images from // the database foreach (Image contextImage in _context.Images) { availableImages.Add(contextImage.FullName); } return View("New", new NewProductViewModel(availableImages)); }
модель представления:
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; using System.Web.Mvc; using Mom_Website.Models; namespace Mom_Website.ViewModels { public class NewProductViewModel { public int Id { get; set; } [Required] [StringLength(40)] public string Name { get; set; } [Required] public string Description { get; set; } //This is the 'default photo' that will be displayed at the product //thumbnail(at the product's index) [Required] public string ThumbnailImage { get; set; } //This property contains the selected photos to be displayed on the //Details page of the product [Required] public IEnumerable<string> SelectedImages { get; set; } [Required] public int Price { get; set; } [Required] public int ShippingCost { get; set; } [Required] public int NumberAvailable { get; set; } //this field contains all the available photos on the database public IEnumerable<SelectListItem> MultiSelectAvailableImages { get; set; } public IEnumerable<SelectListItem> SelectListAvailableImages { get; set; } public NewProductViewModel(IEnumerable<string> availableImages) { this.MultiSelectAvailableImages = new MultiSelectList(availableImages); this.SelectListAvailableImages = new SelectList(availableImages); } public NewProductViewModel() { } } }
Смотреть:
@model Mom_Website.ViewModels.NewProductViewModel @{ ViewBag.Title = "New"; } <h2>New Product</h2> @using (Html.BeginForm("Save", "Products")) { <div class="form-group"> @Html.LabelFor(m => m.Name) @Html.TextBoxFor(m => m.Name, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Name) </div> <div class="form-group"> @Html.LabelFor(m => m.Description) @Html.TextBoxFor(m => m.Description, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Description) </div> <div class="form-group"> @Html.LabelFor(m => m.NumberAvailable) @Html.TextBoxFor(m => m.NumberAvailable, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.NumberAvailable) </div> <div class="form-group"> @Html.LabelFor(m => m.Price) @Html.TextBoxFor(m => m.Price, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Price) </div> <div class="form-group"> @Html.LabelFor(m => m.ShippingCost) @Html.TextBoxFor(m => m.ShippingCost, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.ShippingCost) </div> <div class="form-group"> @Html.LabelFor(m => m.ThumbnailImage) @Html.DropDownListFor(m => m.ThumbnailImage, Model.SelectListAvailableImages, "Select Default Image", new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.ThumbnailImage) </div> <div class="form-group"> @Html.LabelFor(m => m.SelectedImages) @Html.ListBoxFor(m => m.SelectedImages, Model.MultiSelectAvailableImages, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.SelectedImages) </div> @Html.HiddenFor(m => m.Id) @Html.AntiForgeryToken() <button type="submit" class="btn btn-primary">Save</button> } @section scripts { @Scripts.Render("~/Bundles/jqueryval") }