114 votes

Html.DropdownListFor la valeur sélectionnée n'est pas définie

Comment puis-je définir la valeur sélectionnée d'un Html.DropDownListFor? J'ai cherché en ligne et j'ai vu que cela peut être réalisé en utilisant le quatrième paramètre comme ci-dessous :

@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0),  "Veuillez sélectionner un pays")

Ma liste déroulante s'affiche alors comme ceci :

     Veuillez sélectionner un pays
     Royaume-Uni
     États-Unis
     ...

Mais pour une raison quelconque, le Royaume-Uni reste sélectionné mais je veux que "Veuillez sélectionner un pays" soit sélectionné.

Quelqu'un sait comment je peux y arriver?

MISE À JOUR

J'ai mis à jour mon code car il y avait un léger changement dans la fonctionnalité cependant je continue à rencontrer ce problème. Voici ce qui se trouve dans ma vue :

@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Veuillez sélectionner un modèle de commande")

1 est l'id de l'option que je veux sélectionnée, j'ai également essayé avec le texte de l'option mais cela ne fonctionne pas non plus.

Des idées?

1voto

g.breeze Points 368

Vous devriez oublier la classe

SelectList

Utilisez ceci dans votre Controller:

var customerTypes = new[] 
{ 
    new SelectListItem(){Value = "all", Text= "All"},
    new SelectListItem(){Value = "business", Text= "Business"},
    new SelectListItem(){Value = "private", Text= "Private"},
};

Sélectionnez la valeur:

var selectedCustomerType = customerTypes.FirstOrDefault(d => d.Value == "private");
if (selectedCustomerType != null)
    selectedCustomerType.Selected = true;

Ajoutez la liste à la ViewData:

ViewBag.CustomerTypes = customerTypes;

Utilisez ceci dans votre View:

@Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes)

-

Plus d'informations sur: http://www.asp.net/mvc/overview/older-versions/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc

0voto

ibrahim ozboluk Points 67

Ajoutez la section Contrôleur

  ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid);

Ajoutez la section Html

   @Html.DropDownList("Orders", null)

Une méthode simple

0voto

Pour moi solution générale :)

@{
     var selectedCity = Model.Cities.Where(k => k.Id == Model.Addres.CityId).FirstOrDefault();
     if (selectedCity != null)
     { 
         @Html.DropDownListFor(model => model.Addres.CityId, new SelectList(Model.Cities, "Id", "Name", selectedCity.Id), new { @class = "form-control" })
     }
     else
     { 
         @Html.DropDownListFor(model => model.Cities, new SelectList(Model.Cities, "Id", "Name", "1"), new { @class = "form-control" })
     }
}

0voto

Linq to Dropdown with empty item, selected item (works 100%)
(Typé fortement, Risques d'erreurs minimes) Toute modification du modèle sera reflétée dans le binding

Contrôleur

public ActionResult ManageSurveyGroup()
    {
        tbl_Survey sur = new tbl_Survey();
        sur.Survey_Est = "3";

        return View(sur);
    }

Vue

        @{

    //Étape un : Obtenir toute la liste
    var CompEstdList = (from ComType in db.tbl_CompEstdt orderby ComType.Comp_EstdYr select ComType).ToList();

    //Étape deux : Ajouter un élément sans valeur **
    CompEstdList.Insert(0, new eDurar.Models.tbl_CompEstdt { Comp_Estdid = 0, Comp_EstdYr = "--Sélectionnez le type de société--" });

    //Étape trois : Définition de la valeur sélectionnée si une valeur est présente
    var selListEstd= CompEstdList.Select(s => new SelectListItem { Text = s.Comp_EstdYr, Value = s.Comp_Estdid.ToString() });

        }
        @Html.DropDownListFor(model => model.Survey_Est, selListEstd)
        @Html.ValidationMessageFor(model => model.Survey_Est)

Cette méthode de liaison des données est également possible

var selList = CompTypeList.Select(s => new SelectListItem { Text = s.CompTyp_Name, Value = s.CompTyp_Id.ToString(), Selected = s.CompTyp_Id == 3 ? true : false });

0voto

rapturemachine Points 143

Je sais que ce n'est pas vraiment une réponse à la question, mais je cherchais un moyen d'initialiser le DropDownList à partir d'une liste sur le vif dans la vue quand je suis tombé sur ce message.

Mon erreur était que j'ai essayé de créer un SelectList à partir d'un dictionnaire comme ceci:

//wrong!
@Html.DropDownListFor(m => m.Locality, new SelectList(new Dictionary() { { Model.Locality, Model.Locality_text } }, Model.Locality, ...

Je suis ensuite allé fouiller dans la documentation officielle de msdn doc, et j'ai trouvé que DropDownListFor ne nécessite pas nécessairement un SelectList, mais plutôt un IEnumerable:

//right
@Html.DropDownListFor(m => m.Locality, new List() { new SelectListItem() { Value = Model.Locality, Text = Model.Locality_text, Selected = true } }, Model.Locality, new { @class = "form-control select2ddl" })

Dans mon cas, je peux probablement aussi omettre le Model.Locality en tant qu'élément sélectionné, puisque c'est a) le seul élément et b) cela est déjà indiqué dans la propriété SelectListItem.Selected.

Juste au cas où vous vous poseriez la question, la source de données est une page AJAX, qui est chargée dynamiquement en utilisant le contrôle SelectWoo/Select2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X