2016-09-26 14 views
-1

Ich habe Probleme zu verstehen, warum mein Modell nicht aktualisiert wird, wenn ich einen neuen Wert aus meinem Dropdown-Steuerelement auswähle?C# MVC Dropdownliste wird nicht aktualisiert

Hier ist mein Modell

public class UserViewModel 
{ 
    public Users users { get; set; }     
    public IEnumerable<SelectListItem> UserRoles { get; set; }     
} 

-Controller

//GET 
public ActionResult Edit(int id) 
{ 
     var vm = new UserViewModel(); 
     vm.users = repository.GetById(id); 

     vm.UserRoles = db.UserRoles.Select(
          x => new SelectListItem 
          { 
           Selected = true, 
           Text = x.UserRoleName, 
           Value = x.UserRoleID.ToString() 
          } 
      ); 

     if (vm == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(vm); 
    } 


[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(UserViewModel model) 
{ 
     if(ModelState.IsValid) 
     { 
      db.Entry(model).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View();  
} 

Und mein Blick schließlich

<div class="form-group"> 
<label class="control-label col-md-2">User Role</label> 
<div class="col-md-10"> 
     @Html.HiddenFor(model => model.users.UserRoleID) 
     @Html.DropDownListFor(model => model.UserRoles, (IList<SelectListItem>)ViewBag.UserRoles, "-- Select One --", new { @class = "form-control" })     
    </div> 
</div> 

Ich habe durch den Code und in der Sammlung gestuften kann UserRoles in der Sammlung sehen aber ich bin nicht sicher, ob ich den Wert richtig übertrage?

UPDATE

Ich habe für die Aktualisierung des Modells meine POST Methode aktualisiert

public ActionResult Edit(int id, UserViewModel model) 
{ 
     var user = repository.GetById(id); 
     if (ModelState.IsValid) 
     { 
      if (user != null) 
      { 
       user.Username = model.users.Username; 
       user.Forename = model.users.Forename; 
       user.Lastname = model.users.Lastname; 
       user.Email = model.users.Email; 
       user.Status = model.users.Status; 
       user.UserRoleID = Convert.ToInt32(model.UserRoles); 

       db.Entry(user).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       return View(); 
      }     
     } 
     return View();   
    } 

jedoch auf Senden sie mir eine Null reference Ausnahme auf dem Dropdownlist wird geben, wie unten gezeigt? Jetzt sicher warum?

Null reference exception

+0

Versuch liegen Kommentar 'Ausgewählt = true' oder setzen Sie ihn' Ausgewählt = false' –

+2

Sie kein ''