2017-02-13 1 views
0

Ok, ich bin ziemlich neu in MVC/C#. Ich habe wirklich online gesucht, um eine Antwort zu bekommen, und ich habe schon lange gekämpft.Wie man eine boolsche Eigenschaft dynamisch in eine DropDownList in C#/mvc konvertiert 5

In meinem Projekt habe ich ein Mitarbeitermodell:

  • Name VZ NVARCHAR (50) NOT NULL,
  • Vorname NVARCHAR (50) NOT NULL,
  • ...
  • IdSupervisor INTEGER NULL, NULL,
  • IsSupervisor BIT,

Wenn ich eine ne erstellen w Mitarbeiter, ich überprüfe ein Optionsfeld, wenn dieser Mitarbeiter ein Vorgesetzter ist. Es geht gut in meine Datenbank als True/False.

Ich möchte dynamisch eine DropDownList aus dieser True/False-Eigenschaft erstellen, die den Vor- und Nachnamen anzeigt, aber den IDSupervisor (der zuerst als ein Mitarbeiter erstellt wurde) eingeben.

Beispiel von Tabellendaten Mitarbeiter:

  • Chaplin, Charlie, 1, Ja
  • Keaton, Buster, 2, Ja
  • Pickford, Mary, 1, Ja
  • Fairbanks, Douglas, 2, No
  • Laurel, Stan, 1, No
  • Hardy, Oliver, 2, NO

Beispiel für Supervisor-Dropdownlist:

  • Charlie Chaplin
  • Buster Keaton
  • Mary Pickford

Ich weiß, wie eine statische Dropdownlist erstellen, aber es wird für dieses Problem nutzlos.


Mein Code:

Mitarbeiter Modell:

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; } 

Mitarbeiter Controller:

// 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(); 
    } 

Ansicht erstellen:

<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> 

JEDE Hilfe wird sehr geschätzt. Haftungsausschluss: Keine Berühmtheiten wurden während dieser Post geschädigt.

+0

'Mitarbeiter.Wo (Mitarbeiter => employee.IsSuperviseur)' würde die gewünschten Daten zurückgeben. – Kilazur

+0

AJAX ist völlig unnötig. Befolgen Sie den Rat von @ Kilazur. Erstellen Sie aus diesen gefilterten Mitarbeiterdaten eine Auswahlliste, und Sie sind fertig. –

+0

Warum verwenden Sie einen ViewBag in Ihrem Employee Controller? –

Antwort

0

Added Linie # 8 Von EmployesController:

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(); 
    } 

Um den Supervisor vollständigen Namen zu haben, habe ich in meinem Models/Employe.cs:

public string NomSuperviseur 
    { 
     get 
     { 
      return string.Format("{0} {1}", PrenomEmploye, NomEmploye); 
     } 
    } 

P. S. Der "NomSuperviseur" in meinem Controller stammt aus diesen wenigen Codezeilen, da ich ursprünglich nur den Nachnamen ODER den Vornamen in meine DropDownList schreiben konnte.

Und jetzt Tadaaa! Die Magie ist hier! Und kein 'System.Web.Mvc.SelectListItem' erscheint in meiner Liste. Es funktioniert perfekt, sogar in meiner Datenbank. Code anzeigen, Zeilen 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> 
Verwandte Themen