3

我正在开发一个 mvc .net Web 应用程序,并且正在使用实体框架。在我的模型中,我有一个名为“utisateur”(用户)的实体,每个用户都有一个或多个监督他的用户。我想要做的是生成一个包含所有用户列表的多选列表框,以便选择新用户的主管。

我试图这样做,但我得到了这个错误:对象引用未设置为对象的实例。

这是我的模型课:

public class util 
{
    public util()
    {
        user = new utilisateur();
        listesups = Getutilisateurs(null);
    }
    public utilisateur user { get; set; }
    public int[] selectedusers;
    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);
    }
}

这是包含列表框的视图部分:

 @Html.ListBoxFor(model => model.selectedusers, Model.listesups)

这是控制器

    public ActionResult Create2()
    {
        return View();
    }

[HttpPost]
    public ActionResult Create2(util model)
    {
        utilisateur u = new utilisateur();
        if (model.selectedusers != null)
        {
            foreach (var selecteduse in model.selectedusers)
            {
                int selecteduseId = selecteduse;
                utilisateur utilisateur = db.utilisateurs.Where(c => c.id == selecteduseId).FirstOrDefault();
                u.superieur.Add(utilisateur);
            }


        }
        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.nom_role = model.nom_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");

    }

这是错误消息

Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 
Line 44:         <tr><td><label><b>Role : </b></label></td><td>@Html.DropDownListFor(model => model.nom_role, values)</td></tr>
Line 45:         <tr>
Line 46:       <td><label><b>Liste des supérieurs : </b></label></td><td>@Html.ListBoxFor(model => model.selectedusers, Model.listesups)</td></tr>
Line 47:         </table>
Line 48:         <p>
4

1 回答 1

1

我通过像这样编辑我的Create2()方法解决了这个问题:

public ActionResult Create2()
    {
        string login = User.Identity.Name;
        utilisateur ut = new utilisateur();
        var q = from j in db.utilisateurs where j.login == login select j;
        foreach (var i in q)
            ut = i;
        if ((ut.role.nom_role == "Stagiaire") || (ut.role.nom_role == "Developpeur"))
            return Redirect("~/Erreur");
        util u = new util();
        u.listesups = new MultiSelectList (db.utilisateurs, "id", "login");
        return View(u);
    }

[HttpPost]
    public ActionResult Create2(FormCollection collection, util model)
    {


        var sups = collection["selectedusers"];
        string login = User.Identity.Name;
        utilisateur u = new utilisateur();
        List<int> nums = new List<int>();
        var q = from j in db.utilisateurs where j.login == login select j;
        utilisateur courant = new utilisateur();
        try
        {
            foreach (var i in q)
            {
                courant = i;
            }
            foreach (var s in sups.Split(','))
            {
                nums.Add(int.Parse(s));
            }
        }
        catch(Exception ex)
        {
            Logger.Warning(ex.Message, "aucun superieur selectionné");
        }
        try
        {
            foreach (var selecteduse in nums)
            {
                utilisateur utilisateur = db.utilisateurs.Where(c => c.id == (int)selecteduse).FirstOrDefault();
                u.superieur.Add(utilisateur);
            }
        }
        catch(Exception ex)
        {
            Logger.Error(ex.Message, "Erreur ajout supérieurs");
        }
        //}
        if ((model.user.nom != null) && (model.user.prenom != null) && (model.user.login != null) && (model.user.email != null))
        {
            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;
            try
            {
                db.utilisateurs.AddObject(u);
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, "");
            }

                ViewBag.id_role = new SelectList(db.roles, "id", "nom_role", model.user.id_role);
            return RedirectToAction("index");
        }
于 2012-09-03T17:18:28.513 回答