如何在c#/mvc 5中将布尔属性动态转换为DropDownList
好的,我对MVC/C还是个新手。我真的在网上搜索得到了答案,我已经挣扎了很长时间了 在我的项目中,我有一个员工模型:如何在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
- LastName NVARCHAR(50)不为空
- FirstName NVARCHAR(50)不为空
- IdSupervisor整数,NULL
- IsSupervisor位,空
- 卓别林,查理,1,是的
- 基顿,巴斯特,2号,是的
- 皮克福德,玛丽,1号,是的
- 费尔班克斯,道格拉斯,2号
- 劳雷尔,斯坦,1号,不
- 哈迪,奥利弗,2号,不
- 查理·卓别林
- 巴斯特基顿
- 玛丽·皮克福德
我的代码: 员工模式:
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个“多对多”表),所以它就是这样构建的。