0

私は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)

そして、ここでフォームを送信する前に取得したものです。ここで確認できるように、ビューには選択リストが含まれていますが、選択したアイテムは保存されません。

ここに画像の説明を入力してください

4

1 に答える 1

1

MVC 3のデフォルトでは、ViewからviewModelに複数のアイテム(またはarryまたはitems)を含めるための組み込みのサポートはありません。そのため、選択した値が失われます。

これを実現する方法はたくさんありますが、より簡単な方法は、メソッドの署名を変更してフォームコレクションを含め、リストボックスの値を照会することです。メソッドCreate2は次のようになります。

    [HttpPost]
        public ActionResult Create2(FormCollection collection,util model)
        {
           //load selected users into a variable
           var selUsers= collection["selectedusers"];

          //do whatever you want to do with the selected users. 
于 2012-08-29T01:08:47.723 に答える