web-dev-qa-db-fra.com

MVC3 DropDownListFor - un exemple simple?

J'ai des problèmes avec DropDownListFor dans mon application MVC3. J'ai pu utiliser StackOverflow pour comprendre comment les faire apparaître dans la vue, mais je ne sais pas maintenant comment capturer les valeurs dans les propriétés correspondantes du modèle de vue lors de sa soumission. Pour que cela fonctionne, je devais créer une classe interne ayant un identifiant et une propriété de valeur, puis je devais utiliser un IEnumerable<Contrib> pour satisfaire les exigences du paramètre DropDownListFor. Mais maintenant, comment MVC FW est-il supposé mapper la valeur sélectionnée dans cette liste déroulante dans la propriété chaîne simple de mon modèle de vue? 

public class MyViewModelClass
{
    public class Contrib
    {
        public int ContribId { get; set; }
        public string Value { get; set; }
    }

    public IEnumerable<Contrib> ContribTypeOptions = 
        new List<Contrib>
        {
            new Contrib {ContribId = 0, Value = "Payroll Deduction"},
            new Contrib {ContribId = 1, Value = "Bill Me"}
        };

    [DisplayName("Contribution Type")]
    public string ContribType { get; set; }
}

Dans ma vue, je place le menu déroulant sur la page comme ceci:

<div class="editor-label">
    @Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
             new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>

Quand je soumets le formulaire, la ContribType est (bien sûr) nulle. 

Quelle est la bonne façon de faire cela?

110
Trey Carroll

Vous devriez faire comme ça:

@Html.DropDownListFor(m => m.ContribType, 
                new SelectList(Model.ContribTypeOptions, 
                               "ContribId", "Value"))

Où:

m => m.ContribType

est une propriété où la valeur du résultat sera. 

162
Sergey Gavruk

Je pense que cela aidera: Dans Controller, obtenez les éléments de la liste et la valeur sélectionnée

public ActionResult Edit(int id)
{
    ItemsStore item = itemStoreRepository.FindById(id);
    ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), 
                                        "Id", "Name",item.CategoryId);

    // ViewBag to pass values to View and SelectList
    //(get list of items,valuefield,textfield,selectedValue)

    return View(item);
}

et en vue

@Html.DropDownList("CategoryId",String.Empty)
7
Praveen M P

Pour lier des données dynamiques dans une liste déroulante, vous pouvez effectuer les opérations suivantes:

Créez ViewBag dans le contrôleur comme ci-dessous

ViewBag.ContribTypeOptions = yourFunctionValue();

utilisez maintenant cette valeur comme ci-dessous:

@Html.DropDownListFor(m => m.ContribType, 
    new SelectList(@ViewBag.ContribTypeOptions, "ContribId", 
                   "Value", Model.ContribTypeOptions.First().ContribId), 
    "Select, please")
6
Dilip0165
     @Html.DropDownListFor(m => m.SelectedValue,Your List,"ID","Values")

Ici valeur est cet objet du modèle où vous souhaitez enregistrer votre valeur sélectionnée

0
Abdul Aleem