私はmvc.netWebアプリケーションに取り組んでおり、EntityFrameworkを使用しています。私のモデルでは、「utisateur」(ユーザー)と呼ばれるエンティティがあり、すべてのユーザーには、彼を監督する1人以上のユーザーがいます。私がやりたいのは、新しいユーザーのスーパーバイザーを選択するために、すべてのユーザーのリストを含む複数選択リストボックスを生成することです。
私はそれを試みましたが、新しいユーザーを作成して送信するためのフォームに入力した後、次のエラーが発生しました:オブジェクト参照がオブジェクトのインスタンスに設定されていませんが、選択リストを取得し、そこからアイテムを選択しました。(空のオブジェクトは「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)
そして、ここでフォームを送信する前に取得したものです。ここで確認できるように、ビューには選択リストが含まれていますが、選択したアイテムは保存されません。