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?
Versuch liegen Kommentar 'Ausgewählt = true' oder setzen Sie ihn' Ausgewählt = false' –
Sie kein ''
Und das Hinzufügen der SelectList zu Ihnen Modell-Eigenschaft, so benutze es (nicht 'ViewBag') und setze nicht die' Selected' Eigenschaft von 'SelectListItem' - diese wird ignoriert, wenn an eine Modelleigenschaft gebunden wird (der ganze Punkt der Modellbindung, um an deine Eigenschaft zu binden, also der Wert der Eigenschaft, die bestimmt, was ausgewählt ist) –