Исключение при сохранении объекта, содержащего значение раскрывающегося списка

Я пытаюсь сохранить объект, содержащий значение из раскрывающегося списка (SelectList). По какой-то причине я получаю нулевую точку при попытке сохранить. Nullpointer добавлен в фрагмент кода, который вы видите в моем представлении ниже:

 <div class = "form-group">
        @Html.LabelFor(model => model.RoleName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class = "col-md-10">
           @Html.DropDownListFor(model => model.Roles, new SelectList(Model.Roles, "Value", "Value"), new { @class = "text-danger AddMemberControls" })
        </div>
    </div>

Я выбрал значение из раскрывающегося списка на экране, затем нажал «Сохранить», но, похоже, модель не передает значение. Моя модель (ViewModel) выглядит так:

public class AdminViewModel
{
    public int MemberID { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string MemberEmail { get; set; }

    public string Password { get; set; }

    public IEnumerable<SelectListItem> Roles { get; set; }

    public string RoleName { get; set; }
}

Контроллер выглядит так

[HttpPost]
    public ActionResult AddAdmin(AdminViewModel model)
    {
        //var selectedVal = new SelectList(model.Roles);

        if (ModelState.IsValid) 
        {
            var admin = new Admin()
            {
                FirstName = model.FirstName,
                LastName = model.LastName,
                MemberEmail = model.MemberEmail
               // RoleName = selectedVal.DataTextField
                ...
            };
        }
        ...
        return View("AddAdmin");
    }

При работе в режиме отладки ModelState.IsValid оценивается как false, а затем представление выдает упомянутое выше исключение.

Если вы хотите увидеть, как я заполняю раскрывающийся список в моем HttpHet, вот код

[HttpGet]
    public ActionResult AddAdmin()
    {
        DataAccessLayer.ColoContext col = new DataAccessLayer.ColoContext();

        List<Roles> list = new List<Roles>(col.Roles.ToList());
        AdminViewModel viewMod = new AdminViewModel();                         

        //viewMod.Roles = new SelectList(list);

        viewMod.Roles = col.Roles.ToList().Select(x => new SelectListItem()
        {
             Value = x.RoleName,
             Text = x.RoleDescription
        }).ToList();

        return View(viewMod);
    }

Вы имеете в виду NullReferenceException?

David 01.03.2019 14:40

Да нулевая ссылка. Прости. Причина, по которой я не добавил сообщение об ошибке, заключается в том, что оно не на английском языке, поэтому мало кто его все равно поймет.

MOR_SNOW 01.03.2019 14:41

Связанный дубликат содержит значительную информацию о том, что означает NullReferenceException и как с ним бороться. По сути, где-то в вашем коде вы пытаетесь использовать объект, который является null. Вам нужно определить строку кода, вызывающую исключение, и объект в этой строке, который является null. Затем либо измените код, чтобы он обрабатывал значение null в этом объекте, либо отследите, откуда появился объект, и исправьте этот код, чтобы предоставить допустимый объект вместо null.

David 01.03.2019 14:42

В вашем случае кажется вероятным, что Model.Roles выдает ошибку. Вы пытаетесь разыменовать объект Model, но не передаете модель в представление: return View("AddAdmin");

David 01.03.2019 14:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
11
0

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