MVC 4 DropDownListFor Réglez l'Élément Sélectionné Basé sur le Texte

Normalement lorsque j'utilise le DropDownListFor helper je suis en sélectionnant l'élément est sélectionné en fonction d'un ID (int), mais maintenant j'ai une situation où j'ai besoin d'afficher l'élément sélectionné sur la base du texte (chaîne de caractères) et non pas une IDENTITÉ. Dans le contrôleur, le modèle est correctement réglé pour la valeur que je veux avec cette propriété:

model.Title

Un exemple de titre serait "Front Office". J'ai le code suivant dans mon Controller:

ViewBag.Titles = new SelectList(jobTitles, "Name", "Name");

et sur la vue, j'ai ceci:

@Html.DropDownListFor(model => model.Title, ViewBag.Titles as SelectList)

La DropDownList est de peupler correctement avec tous les titres d'emploi, il n'est tout simplement pas de sélectionner le bon titre de l'emploi, en fonction de modèle.De titre. Ce que je fais mal?

Mise à JOUR:

Il semble y avoir quelque chose de potentiellement va pas dans mon code, donc je suis en train de mettre tout ça ici pour voir si je fais quelque chose de mal.

Contrôleur:

public ActionResult Edit(int id = 0)
    {
        StaffMember staffmember = StaffMember.SelectByID(id); //gets staff member from db

        ViewBag.Titles = new SelectList(JobTitle.SelectAll(), "Name", "Name", staffmember.Title); //JobTitle.SelectAll() returns List<JobTitle>

        StaffEditModel model = new StaffEditModel();
        model.ID = staffmember.ID;
        model.ClientID = staffmember.ClientID;
        model.FirstName = staffmember.FirstName;
        model.MiddleInitial = staffmember.MiddleInitial;
        model.LastName = staffmember.LastName;
        model.Title = staffmember.Title;
        model.Phone = staffmember.Phone;
        model.Email = staffmember.Email;
        model.Birthday = staffmember.Birthday;
        model.HireDate = staffmember.HireDate;
        model.Biography = staffmember.Biography;

        if (staffmember == null)
        {
            return HttpNotFound();
        }
        return View(model);
    }

Modèle:

public class StaffEditModel
{
    public int ID { get; set; }

    public int ClientID { get; set; }

    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Display(Name = "Middle Initial")]
    public string MiddleInitial { get; set; }

    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    public string Title { get; set; } //this is the property I'm trying to show in DropDown

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
    public string Birthday { get; set; }

    [Display(Name = "Hire Date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
    public string HireDate { get; set; }

    public string Email { get; set; }

    [MaxLength(14)]
    public string Phone { get; set; }
    public string Biography { get; set; }
}

Vue:

@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.Titles,"Value","Text", Model.Title))
  • Est-ce que votre JobTitle.SelectAll() retourne List<string>? Ou un autre type d'objet?
InformationsquelleAutor Cory | 2013-06-22