Ich habe eine Seite, auf der Rollen in einer Liste von Kontrollkästchen angezeigt werden, Sie können auswählen, welche Rollen ein Benutzer haben soll, und klicken Sie dann auf eine Schaltfläche zum Speichern es.MVC: Rollen in einer Liste von Kontrollkästchen anzeigen und dann speichern
Hier ist mein Modell:
public class RegisterModel
{
[DisplayName("Roles")]
public string[] Roles
{
get
{
return System.Web.Security.Roles.GetAllRoles();
}
set { }
}
}
Meine Ansicht:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<WebUI.Models.RegisterModel>" %>
<% using (Html.BeginForm()) { %>
<% foreach(string role in Model.Roles) { %>
<input type="checkbox" value="<%: role %>" /> <%: role %>
<% } %>
<p>
<input type="submit" value="Register" />
</p>
<% } %>
Und die Funktionen von meinem Controller:
public ActionResult Register()
{
return View();
}
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
//save roles
return RedirectToAction("Index", "Home");
}
// If we got this far, something failed, redisplay form
return View(model);
}
Wenn ich versuche, meine Seite zu sehen, erhalte ich eine "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt" -Fehler in der foreach-Anweisung, was darauf hinweist, dass Model.Roles leer ist.
- Übergeben die Rollen korrekt durch mein Modell? Oder sollte ich die Rollen als ViewData durch meine Controller-Aktion weitergeben?
- Wenn ich die Rollen als ViewData statt über mein Modell übergebe, wie kann ich auf die ausgewählten Elemente zugreifen, wenn ich das Formular absende, sodass ich
Roles.AddUsersToRoles()
anrufen kann?