Я получаю эту ошибку «Нет элемента ViewData типа« IEnumerable <SelectListItem>», который имеет ключ« Branch_Name » - PullRequest
0 голосов
/ 15 апреля 2020

Я получаю эту ошибку «Нет элемента ViewData типа« IEnumerable », который имеет ключ« Branch_Name », и я пытаюсь его решить. Это моя модель

        public int Id { get; set; }

        [DisplayName("Unit Name")]
        [Required]
        [StringLength(150, MinimumLength = 3)]
        public string Unit_Name { get; set; }

        [DisplayName("Prefix")]
        [Required]
        [StringLength(6, MinimumLength = 1)]
        public string Prefix { get; set; }

        [DisplayName("Branch Name")]
        public string Branch_Name { get; set; }

        [DisplayName("Status")]
        public string Status { get; set; }

        public virtual Tourism_Branch Tourism_Branch { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Order> Orders { get; set; }

Это мой контроллер

        public ActionResult Create([Bind(Include = "Id,Unit_Name,Prefix,Branch_Name,Status")] Budgeted_Unit budgeted_Unit)
        {
            if (ModelState.IsValid)
            {
                if (db.Budgeted_Unit.Count(e => e.Unit_Name == budgeted_Unit.Unit_Name) == 0)
                {
                    db.Budgeted_Unit.Add(budgeted_Unit);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                else
                {
                    ViewBag.Message = budgeted_Unit.Unit_Name + " already exists!";
                    return View();
                }
            }

            ViewBag.Branch_Name = new SelectList(db.Tourism_Branch, "Branch_Name", "Branch_Name", budgeted_Unit.Branch_Name);
            return View(budgeted_Unit);
        }

А это мой вид

    <div class="form-group">
        @Html.LabelFor(model => model.Branch_Name, "Branch_Name", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("Branch_Name", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.Branch_Name, "", new { @class = "text-danger" })
        </div>
    </div>

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Большое спасибо @ Джей sh, я нашел решение. Проблема была в операторе else:


            if (ModelState.IsValid)
            {
                if (db.Budgeted_Unit.Count(e => e.Unit_Name == budgeted_Unit.Unit_Name) == 0)
                {
                    db.Budgeted_Unit.Add(budgeted_Unit);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                else
                {
                    ViewBag.Message = budgeted_Unit.Unit_Name + " already exists!";
                    return View();
                }
            }

Все, что мне нужно было сделать, - это переназначить ViewBag.Branch_Name внутри оператора else, как показано ниже:

                else
                {
                    ViewBag.Message = budgeted_Unit.Unit_Name + " already exists!";
                    ViewBag.Branch_Name = new SelectList(db.Tourism_Branch, "Branch_Name", "Branch_Name");
                    return View();
                }
0 голосов
/ 15 апреля 2020

Я бы посоветовал вам go по этой ссылке: https://www.aspsnippets.com/Articles/Populate-Bind-DropDownList-from-ViewBag-in-ASPNet-MVC.aspx

Устранение вашей ошибки: Вам необходимо использовать .ToList () после д.т. SelectList может принимать IEnumerable, тогда как вы указали другой тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...