如何在c#/mvc 5中将布尔属性动态转换为DropDownList

如何在c#/mvc 5中将布尔属性动态转换为DropDownList,c#,asp.net-mvc,C#,Asp.net Mvc,好的,我对MVC/C还是个新手。我真的在网上搜索得到了答案,我已经挣扎了很长时间了 在我的项目中,我有一个员工模型: LastName NVARCHAR(50)不为空 FirstName NVARCHAR(50)不为空 IdSupervisor整数,NULL IsSupervisor位,空 创建新员工时,如果该员工是主管,则选中单选按钮。它以真/假的形式进入我的数据库 我要做的是从该True/False属性动态创建一个DropDownList,它将显示名字和姓氏,但将输入IDSupervi

好的,我对MVC/C还是个新手。我真的在网上搜索得到了答案,我已经挣扎了很长时间了

在我的项目中,我有一个员工模型:

  • LastName NVARCHAR(50)不为空
  • FirstName NVARCHAR(50)不为空
  • IdSupervisor整数,NULL
  • IsSupervisor位,空
创建新员工时,如果该员工是主管,则选中单选按钮。它以真/假的形式进入我的数据库

我要做的是从该True/False属性动态创建一个DropDownList,它将显示名字和姓氏,但将输入IDSupervisor(首先作为员工创建)

员工表数据示例:

  • 卓别林,查理,1,是的
  • 基顿,巴斯特,2号,是的
  • 皮克福德,玛丽,1号,是的
  • 费尔班克斯,道格拉斯,2号
  • 劳雷尔,斯坦,1号,不
  • 哈迪,奥利弗,2号,不
主管下拉列表示例:

  • 查理·卓别林
  • 巴斯特基顿
  • 玛丽·皮克福德
我知道如何创建静态DropDownList,但对于这个问题它将是无用的


我的代码:

员工模式:

public Employe()
    {
        this.AccesApplicatif1 = new HashSet<AccesApplicatif>();
        this.TelephoneCellulaire1 = new HashSet<TelephoneCellulaire>();
        this.CleBatiment1 = new HashSet<CleBatiment>();
        this.EquipementInfo = new HashSet<EquipementInfo>();
        this.GroupeSecurite1 = new HashSet<GroupeSecurite>();
        this.VehiculeCompagnie1 = new HashSet<VehiculeCompagnie>();
    }
    public int IdEmploye { get; set; }
    public string NomEmploye { get; set; }
    public string PrenomEmploye { get; set; }
    public int IdSuperviseur { get; set; }
    public Nullable<bool> IsSuperviseur { get; set; }
创建视图:

<div class="form-group">
        @Html.LabelFor(model => model.IdSuperviseur, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.IdSuperviseur, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.IdSuperviseur, "", new { @class = "text-danger" })
        </div>
    </div>

     <div class="form-group">
        @Html.LabelFor(model => model.IsSuperviseur, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            <div class="checkbox">
                @Html.RadioButtonFor(model => model.IsSuperviseur, false, new { id = "rbtNonSuperviseur" })
                @Html.Label("rbtNonSuperviseur", "Non")
                @Html.RadioButtonFor(model => model.IsSuperviseur, true, new { id = "rbtOuiSuperviseur" })
                @Html.Label("rbtOuiSuperviseur", "Oui")
                @Html.ValidationMessageFor(model => model.IsSuperviseur, "", new { @class = "text-danger" })
            </div>
        </div>
    </div>

@LabelFor(model=>model.IdSuperviseur,htmlAttributes:new{@class=“controllabel col-md-2”})
@EditorFor(model=>model.IdSuperviseur,new{htmlAttributes=new{@class=“form control”}})
@Html.ValidationMessageFor(model=>model.IdSuperviseur,“,new{@class=“text danger”})
@LabelFor(model=>model.IsSuperviseur,htmlAttributes:new{@class=“controllabel col-md-2”})
@RadioButton(model=>model.IsSuperviseur,false,新的{id=“rbtNonSuperviseur”})
@标签(“RBTNONSuperviser”、“非”)
@RadioButton(model=>model.IsSuperviseur,true,新的{id=“rbtOuiSuperviseur”})
@标签(“RBTOUISuperviser”、“Oui”)
@Html.ValidationMessageFor(model=>model.IsSuperviseur,“,new{@class=“text danger”})
任何帮助都将不胜感激。免责声明:在这篇文章中没有名人受到伤害。

添加了EmployeesController的第8行:

// GET: Employes/Create
    public ActionResult Create()
    {
        ViewBag.IdDepartement = new SelectList(db.Departement, "IdDepartement", "Description");
        ViewBag.IdEmployeur = new SelectList(db.Employeur, "IdEmployeur", "NomEmployeur");
        ViewBag.IdLocalisation = new SelectList(db.Localisation, "IdLocalisation", "Description");
        ViewBag.IdTelephoneBureau = new SelectList(db.TelephoneBureau, "IdTelephoneBureau", "NumeroInventaire");
        ViewBag.IdTitre = new SelectList(db.TitreEmploye, "IdTitre", "Description");
        return View();
    }
public ActionResult Create()
    {
        ViewBag.IdDepartement = new SelectList(db.Departement, "IdDepartement", "Description");
        ViewBag.IdEmployeur = new SelectList(db.Employeur, "IdEmployeur", "NomEmployeur");
        ViewBag.IdLocalisation = new SelectList(db.Localisation, "IdLocalisation", "Description");
        ViewBag.IdTelephoneBureau = new SelectList(db.TelephoneBureau, "IdTelephoneBureau", "NumeroInventaire");
        ViewBag.IdTitre = new SelectList(db.TitreEmploye, "IdTitre", "Description");            
        ViewBag.IdSuperviseur = new SelectList(db.Employe.Where(employe => employe.IsSuperviseur.HasValue && employe.IsSuperviseur.Value), "IdEmploye", "NomSuperviseur");
        return View();
    }
为了获得主管全名,我在Models/Employe.cs中添加了以下内容:

public string NomSuperviseur
    {
        get
        {
            return string.Format("{0} {1}", PrenomEmploye, NomEmploye);
        }
    }
另外,我的控制器中的“NomSupervisorEUR”来自这几行代码,因为最初,我只能在我的DropDownList中输入姓或名

现在是Tadaaa!魔法就在这里!我的列表中没有“System.Web.Mvc.SelectListItem”。即使在我的数据库中,它也能完美地工作。视图代码,第4-5行:

        <div class="form-group">
        @Html.LabelFor(model => model.IdSuperviseur, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">                
            @Html.DropDownListFor(model => model.IdSuperviseur,
                (SelectList)ViewBag.IdSuperviseur, "", new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.IdSuperviseur, "", new { @class = "text-danger" })
        </div>
    </div>

@LabelFor(model=>model.IdSuperviseur,htmlAttributes:new{@class=“controllabel col-md-2”})
@Html.DropDownListFor(model=>model.IdSuperviseur,
(SelectList)ViewBag.IdSuperviseur,“,新{@class=“form control”})
@Html.ValidationMessageFor(model=>model.IdSuperviseur,“,new{@class=“text danger”})

employee.Where(employee=>employee.IsSuperviseur)
将返回所需的数据。AJAX完全没有必要。遵循@Kilazur的建议。从过滤后的员工数据创建一个选择列表,就完成了。为什么要在员工控制器中使用ViewBag?@Kilazur:我试过了,但我想我遇到了问题,因为IsSupervisor可以为空。请(在哪里/如何)给我举个确切的例子好吗?我不确定我是否把更改放在了正确的位置。正如我所说,我缺乏你的经验。非常感谢。我真的想把这个问题标记为已解决。@Jeroen:我的数据库相当复杂(17个主表+6个“多对多”表),所以它就是这样构建的。