ArgumentNullException: значение не может быть нулевым. (Параметр «предметы»)

У меня проблема в моем коде. Я пытаюсь отредактировать сведения о продукте и добавить поле «Категория» и «Издатель» в виде раскрывающегося списка при обновлении сведений, как на этом изображении: здесь

Это мой код в контроллере:

[HttpGet]
public IActionResult Edit_Products(string productId)
{
    ViewBag.ListofPublisher = context.Publisher.ToList();
    ViewBag.ListofCategory = context.Category.ToList();

    return View(context.Product.Find(productId));
}

В представлении я добавляю два выпадающих списка для загрузки категории и издателя и отправляю их обратно в контроллер.

<div class = "form-group">
    <label>Category</label>
    <br />
    <select class = "form-control" asp-for = "CategoryCode"
            asp-items = "@(new SelectList(ViewBag.ListofCategory,"CategoryCode","CategoryName"))">
    </select>
</div>
@*Product Category*@
<div class = "form-group">
    <label>Publisher</label>
    <br />
    <select class = "form-control" asp-for = "PublisherCode"
            asp-items = "@(new SelectList(ViewBag.ListofPublisher,"PublisherCode","PublisherName"))">
    </select>
    </div>
    @*Product Publisher*@

В контроллере Edit я обновлю это до таблицы

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit_Products(Product product,string productCode)
{
    if (ModelState.IsValid)
    {
        Product result = context.Product.SingleOrDefault(p => p.ProductCode.Equals(product.ProductCode));

        try
        {
            string proCode = product.ProductCode;
            result.ProductCode = (product.CategoryCode) + (product.PublisherCode) + (proCode.Substring(proCode.Length - 2));
            result.ProductName = product.ProductName;
            result.Price = product.Price;
            result.Quantity = product.Quantity;
            result.AuthorName = product.AuthorName;
            result.ReleaseYear = product.ReleaseYear;
            result.Ver = product.Ver;
            result.Used = product.Used;
            result.Review = product.Review;
            result.CategoryCode = product.CategoryCode;
            result.PublisherCode = product.PublisherCode;
            result.Picture = product.Picture;

            context.SaveChanges();
        }
        catch (Exception exx)
        {
           ViewBag.Msg = exx.Message;
        }

        return RedirectToAction("Index", "Manage_Products");
    }

    return View();
}

Затем я получил эту ошибку:

ArgumentNullException: значение не может быть нулевым. (Параметр «предметы»)

Пожалуйста, помогите мне.

Какая строка в коде выдает ошибку?

Chetan 13.12.2020 10:05

Отвечает ли это на ваш вопрос? Что такое NullReferenceException и как его исправить?

JohnG 13.12.2020 10:06

Код ошибки отображается в двух строках. Выбрать в представлении

Eric 13.12.2020 10:18

Насколько я могу судить… asp-items = "@(new SelectList(ViewBag.ListofCategory,"CategoryCode","CategoryNa‌​me"))"> … или строка списка издателей возвращает значение null.

JohnG 13.12.2020 10:23

Как я могу установить значение для выбора?

Eric 13.12.2020 10:31

Я предполагаю, что «настроено» правильно. Компилятор не жалуется на «настройку»… он жалуется на то, что… «когда настройка» завершена, код передает ему значение null в одном из параметров. Я бы предположил, что это может быть один из списков… ViewBag.ListofCategory или ViewBag.ListofPublisher. Поскольку это, возможно, «новые» списки… вы уверены, что списки «инициализируются» в содержащем классе?

JohnG 13.12.2020 10:39

Я уверен, что создал его в содержащем классе

Eric 13.12.2020 10:59

Ну… ошибка кажется довольно очевидной… один или оба списка — это null. Если списки инициализируются, значит, что-то еще должно создавать один или оба списка null. Вы отследили это, например, поставили точку останова в коде и проверили списки, чтобы увидеть, могут ли они быть null? Это будет проблемой при съемке 101.

JohnG 13.12.2020 11:10

Это происходит, когда ваш пост заканчивается ModelState.IsValid == false? Если да - вам нужно "пополнить" ViewBag значениями, потому что они не распределяются между запросами.

Guru Stron 13.12.2020 11:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
9
3 182
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из того, что я вижу в вопросе, я бы предположил, что ошибка возникает при запросе POST, когда ваша модель не проходит проверку (т. Е. ModelState.IsValid является false). Если это так - вам нужно снова заполнить ListofPublisher и ListofCategory, потому что данные, которые вы поместили в ViewBag/ViewData, доступны только в течение жизненного цикла запроса, в рамках которого вы их заполнили (подробнее здесь). то есть вызов:

ViewBag.ListofPublisher = context.Publisher.ToList();
ViewBag.ListofCategory = context.Category.ToList();

Перед return View(); в вашем методе POST.

Другие вопросы по теме