Как исправить 'Нет элемента ViewData типа' IEnumerable <SelectListItem>', который имеет ключ' UserID_TO '.'в asp.net mvc - PullRequest
0 голосов
/ 11 июня 2019

Каждый раз при отправке появляется следующая ошибка: «Нет элемента View Data типа« IEnumerable », который имеет ключ« UserID_TO ».» Однако данные, которые были представлены ранее, успешно вошли в базу данных. Несмотря на то, что он успешно вошел, эта ошибка сохранилась.

Я пробовал использовать DropDownList или DropDownListFor.

Мой контроллер


        [HttpGet]
        public ActionResult AddOrEdit()
        {

            InputCP inputCP = new InputCP();
            ViewBag.UserID_TO = new SelectList(db.Users, "ID", "Name");
            ViewBag.UserID_CC = new SelectList(db.Users, "ID", "Name");
            ViewBag.UserID_Sales = new SelectList(db.Users, "ID", "Name");
            return View(inputCP);
        }

        [HttpPost]
        public ActionResult AddOrEdit(InputCP inputCP)
        {
            try
            {
                inputCP.Created = DateTime.Now;
                inputCP.LastModified = DateTime.Now;
                db.InputCPs.Add(inputCP);
                db.SaveChanges();

                ViewBag.Message = "Success";
                return View();

            }
            catch (Exception ex)
            {
                ViewBag.Exception = ex;
                ViewBag.ErrorMessage = "An error occured, please check your data input and try again";
            }
            return View("Error");

        }

Моя модель

    using System.Collections.Generic;
    using System.Web.Mvc;

    public partial class InputCP
    {
        public int ID { get; set; }
        public Nullable<System.Guid> UserID_TO { get; set; }
        public Nullable<System.Guid> UserID_CC { get; set; }
        public Nullable<System.Guid> UserID_Sales { get; set; }
        public string Product { get; set; }
        public string DrawingSpect { get; set; }
        public string Spec { get; set; }
        public string Questioner { get; set; }
        public string COGS { get; set; }
        public Nullable<int> CustomerID { get; set; }
        public string PartNumber { get; set; }
        public Nullable<int> CurrencyCode { get; set; }
        public Nullable<decimal> Price { get; set; }
        public Nullable<decimal> LeadTime { get; set; }
        public Nullable<decimal> Validity { get; set; }
        public string Warranty { get; set; }
        public string Notes { get; set; }
        public Nullable<System.DateTime> Created { get; set; }
        public Nullable<System.DateTime> LastModified { get; set; }

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

My View

            @Html.LabelFor(model => model.UserID_TO, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(Model => Model.UserID_TO, (IEnumerable<SelectListItem>)ViewBag.UserID_TO, "Select User", htmlAttributes: new { @class = "form-control full-width mt-1" })
                @Html.ValidationMessageFor(model => model.UserID_TO, "", new { @class = "text-danger validation-error" })
            </div>
        </div>

Я ожидаю результатов в случае успеха, то есть к исходному виду по умолчанию

1 Ответ

0 голосов
/ 11 июня 2019

Проблема в том, что после нажатия кнопки отправки происходит повторная запись.Поэтому при отправке данных обратно на ту же страницу добавьте ViewBag перед возвратом View ().

, поскольку MVC просматривает ваши ViewData для чего-то с именем UserID_TO и выдает ошибку, если в ViewData нет объекта с таким именем.

        [HttpPost]
        public ActionResult AddOrEdit(InputCP inputCP)
        {

            ViewBag.UserID_TO = new SelectList(db.Users, "ID", "Name");
            ViewBag.UserID_CC = new SelectList(db.Users, "ID", "Name");
            ViewBag.UserID_Sales = new SelectList(db.Users, "ID", "Name");

            try
            {
                inputCP.Created = DateTime.Now;
                inputCP.LastModified = DateTime.Now;
                db.InputCPs.Add(inputCP);
                db.SaveChanges();

                ViewBag.Message = "Success";
                return View();

            }
            catch (Exception ex)
            {
                ViewBag.Exception = ex;
                ViewBag.ErrorMessage = "An error occured, please check your data input and try again";
            }
            return View("Error");

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