列表对象引用 null

List Object Reference null

提问人:Baran 提问时间:6/11/2023 最后编辑:ndc85430Baran 更新时间:6/11/2023 访问量:43

问:

我有一个 ProfileVM,其中包括:

    public class ProfileVM
    {
        public ApplicationUser User { get; set; }

        [NotMapped]
        public IEnumerable<SelectListItem> JobsList { get; set; }

    }

由于我有一个部分视图,允许我们更新用户帐户详细信息,因此在加载视图之前一切正常。视图已加载,DropDownList 也已加载。

这是我的观点代码:


[...]

<div class="col-lg-4">
<div class="form-group floating-label enable-floating-label show-label">
                                                <label asp-for="User.JobFunction"> Job <span class="text-danger">*</span></label>
                                                <select class="form-control select2" id="JobFunction" name="User.JobFunction">
                                                    <option value="">Select a job</option>
                                                    @foreach (var job in Model.JobsList)
                                                    {
                                                        <option value="@job.Value" selected="@(job.Value == Model.User.JobFunction)">@job.Text</option>
                                                    }
                                                </select>
</div>
</div>

控制器如下:

        [HttpGet]
        public IActionResult Profile(string Id)
        {
            if (Id == null)
            {
                return NotFound();
            }

            var userFromDb = _context.ApplicationUser.Find(Id);

            if (userFromDb == null)
            {
                return NotFound();
            }

            var profileVM = new ProfileVM
            {
                User = userFromDb,
                JobsList = _unitOfWork.Job.GetJobsList() // Assuming you have a method to populate the job options
            };

            return View(profileVM);
        }


        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Profile(ProfileVM profileVM)
        {
            if (ModelState.IsValid)
            {

                if (profileVM.JobsList == null)
                {
                    List<Job> jobs = _context.Jobs.ToList();
                    List<SelectListItem> jobsList = jobs.Select(job => new SelectListItem
                    {
                        Value = job.JobDescription_EN,
                        Text = job.JobDescription_EN
                    }).ToList();

                    profileVM.JobsList = jobsList;
                }

                                

                //Save changes to the user
                _unitOfWork.User.Update(profileVM.User);
                _unitOfWork.Save();
                return RedirectToAction(nameof(Index), "Home");
            }

            return View(profileVM);
        }

问题是我在单击“更新按钮”时丢失了 JobsList 实例。 因此,我添加了以下代码,将另一个时间 jobsList 列表分配给 profileVM.JobsList:


                if (profileVM.JobsList == null)
                {
                    List<Job> jobs = _context.Jobs.ToList();
                    List<SelectListItem> jobsList = jobs.Select(job => new SelectListItem
                    {
                        Value = job.JobDescription_EN,
                        Text = job.JobDescription_EN
                    }).ToList();

                    profileVM.JobsList = jobsList;
                }

我做错了什么,因为profileVM.JobsList仍然为空,并出现以下错误:

“NullReferenceException:对象引用未设置为对象的实例。”

蚂蚁 @foreach(Model.JobsList 中的 var 作业) { @job。发短信 }

?

感谢您的帮助!

C# 实例 NullReferenceException 初始值设定项列表

评论

0赞 Progman 6/11/2023
欢迎使用 Stack Overflow。请观看导览,了解 Stack Overflow 的工作原理,并阅读如何提问,了解如何提高问题的质量。然后编辑您的问题,将您的源代码作为最小的可重现示例包含在内,该示例可以由其他人编译和测试。
0赞 SoftwareDveloper 6/12/2023
请参阅此链接: code-maze.com/select-tag-helper-aspnetcore 可以按如下方式修改视图的 select 标记: <select class=“form-control select2” asp-for=“User.JobFunction” asp-items=“@Model.JobsList”> <option>请选择</option> </select>
0赞 Baran 6/12/2023
非常感谢,我会:)研究它。视图选择标记工作正常。现在,我必须使用我的控制器代码来调整您的文档。

答: 暂无答案