我正在开发一个 mvc .net Web 应用程序,并且正在使用实体框架。在我的模型中,我有一个名为“utisateur”(用户)的实体,每个用户都有一个或多个监督他的用户。我想要做的是生成一个包含所有用户列表的多选列表框,以便选择新用户的主管。
我尝试这样做,但在填写创建新用户的表单并提交后,我收到此错误:对象引用未设置为对象的实例,但是我得到了选择列表并从中选择了项目。(空对象是“model.selectedusers”但我不知道为什么它是空的!)
这是我的模型课:
public class util
{
public util()
{
user = new utilisateur();
listesups = Getutilisateurs(null);
}
public utilisateur user { get; set; }
public int[] selectedusers;
public string nom_role { get; set; }
public MultiSelectList listesups { get; set; }
public MultiSelectList Getutilisateurs(int[] selectedValues)
{
var db = new BDGestionEntities();
List<utilisateur> utilisateurs = db.utilisateurs.ToList();
return new MultiSelectList(utilisateurs, "id", "login", selectedValues);
}
}
这是我的控制器:
public ActionResult Create2()
{
util u = new util();
u.listesups = new MultiSelectList (db.utilisateurs, "id", "login");
return View(u);
}
[HttpPost]
public ActionResult Create2(util model)
{
utilisateur u = new utilisateur();
try
{
foreach (var selecteduse in model.selectedusers)
{
utilisateur utilisateur = db.utilisateurs.Where(c => c.id == selecteduse).FirstOrDefault();
u.superieur.Add(utilisateur);
}
}
catch(Exception ex)
{
Logger.Error(ex.Message, "Erreur ajout supérieurs");
}
u.nom = model.user.nom;
u.prenom = model.user.prenom;
u.solde_conge = model.user.solde_conge;
u.email = model.user.email;
u.login = model.user.login;
u.pwd = model.user.pwd;
role role = new role();
role = db.roles.Where(c => c.nom_role == model.nom_role).FirstOrDefault();
u.role = role;
db.utilisateurs.AddObject(u);
db.SaveChanges();
ViewBag.id_role = new SelectList(db.roles, "id", "nom_role", model.user.id_role);
return RedirectToAction("index");
}
这是包含选择列表的视图部分
@Html.ListBoxFor(model => model.selectedusers, Model.listesups)
这里是我在提交表单之前得到的,你可以在这里看到视图包含选择列表,但未保存选定的项目