0

我正在开发一个 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)

这里是我在提交表单之前得到的,你可以在这里看到视图包含选择列表,但未保存选定的项目

在此处输入图像描述

4

1 回答 1

1

默认情况下,在 MVC 3 中,没有内置支持将多个项目(或一个或多个项目)从 View 中包含到 viewModel 中。这就是您丢失所选值的原因。

有很多方法可以实现,但更简单的一种是修改方法的签名以包含表单集合并查询列表框的值。您的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 回答