0

The ViewData item with the key "roleID" is a "System.Int32" but must be of type 'IEnumerable ".

I cant fix it Please i need your help!! This is my code:

admin Model:

 [Key]
    public int adminID { get; set; }

    [DisplayName("Role")]
    public int roleID { get; set; }
    public virtual Role roles { get; set; }

    [Required(ErrorMessage ="Le nom est obligatoire.")]
    public string Nom { get; set; }

    [Required(ErrorMessage = "Le prenom est obligatoire.")]
    public string Prenom { get; set; }

    [Required(ErrorMessage = "L'email est obligatoire.")]
    [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "email n'est pas valide.")]
    [DataType(DataType.EmailAddress)]
    [Remote("IsEmailAdminExist", "Admin", ErrorMessage = "URL exist!")]
    public virtual  string Email { get; set; }

    [Required(ErrorMessage = "Le mot de pass est obligatoire.")]
    [DataType(DataType.Password)]
    public string Pass { get; set; }

    public string Photo { get; set; }

    [NotMapped]
    public HttpPostedFileBase PhotoUpload{ get; set; }

role Model:

[Key]
public int roleID { get; set; }

[Required(ErrorMessage = "Le nom est obligatoire.")]
public string Nom { get; set; }

public virtual ICollection<Admin> Admins { get; set; }

Admin Controller:

GET :

// GET: Admin/Edit/5
            public ActionResult Edit(int id)
            {
                var data = from p in AdminContext.roles
                           select new
                           {
                               roleID = p.roleID,
                               roleNom = p.Nom
                           };

                SelectList list = new SelectList(data, "roleID", "roleNom");
                ViewBag.Roles = list;


                Admin admin = AdminContext.admins.Where(x => x.adminID == id).SingleOrDefault();
                if (admin != null)
                {
                    return View("~/Views/Administration/Admin/Edit.cshtml", admin);
                }
                else
                {
                    return HttpNotFound();
                }
            }

POST:

// POST: Admin/Edit/5
        [HttpPost]
        public ActionResult Edit(Admin model)
        {
            Admin admin = AdminContext.admins.Where(x => x.adminID == model.adminID).SingleOrDefault();
            ModelState.Remove("Pass");
            if (ModelState.IsValid)
            {
                if (admin != null)
                {
                    if (model.PhotoUpload != null && model.PhotoUpload.ContentLength > 0)
                    {
                        var extension = Path.GetExtension(model.PhotoUpload.FileName);
                        var filename = model.adminID + extension;
                        var path = Path.Combine(Server.MapPath("~/Content/TemplateAdmin/assets/upload/admins"), filename);
                        model.PhotoUpload.SaveAs(path);
                        model.Photo = "/Content/TemplateAdmin/assets/upload/admins/" + filename;
                    }
                    else
                    {
                        model.Photo = admin.Photo;
                    }
                    if (model.Pass == null && model.Pass != "")
                        model.Pass = admin.Pass;

                    AdminContext.Entry(admin).CurrentValues.SetValues(model);
                    AdminContext.SaveChanges();
                }
            }
            //tempdata
            return View("~/Views/Administration/Admin/Edit.cshtml", model);
        }

Edit View:

                        <div class="form-group">
                            <label class="control-label">
                                Role <span class="symbol required"></span>
                            </label>
                            @Html.DropDownListFor(m => m.roleID, ViewBag.Roles as SelectList, "Selectioner un role", new { @class = "form-control search-select", id = "roleID" })
                        </div>
Malek Ben el ouafi
  • 995
  • 12
  • 37

1 Answers1

0

The problem is that you don't repopulate your SelectList in POST action, so the view is returned to user without SelectList.

Repeat this code in POST action (or wrap it in a function for DRYness):

var data = from p in AdminContext.roles
            select new
            {
                roleID = p.roleID,
                roleNom = p.Nom
            };

SelectList list = new SelectList(data, "roleID", "roleNom");
ViewBag.Roles = list;
ttaaoossuuuu
  • 7,786
  • 3
  • 28
  • 58