2009-09-09 11 views
2

Quelqu'un peut-il m'aider à obtenir des valeurs à partir d'une liste déroulante dans asp.net mvc?Obtention de valeurs à partir d'une liste déroulante asp.net mvc

Je peux obtenir des valeurs de textboxes, etc ... mais, comment puis-je obtenir ces 2 choses ...

  1. Obtenir l'élément sélectionné Valeur de la liste déroulante de la classe contrôleur
  2. Obtenir toute la liste des articles de la liste déroulante de la classe contrôleur

Merci

Répondre

15

Vous pouvez obtenir la valeur sélectionnée dans une liste déroulante de la même manière que pour les zones de texte.

En utilisant le modèle par défaut de liaison

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetValueExample(string MyList) { 
    //MyList will contain the selected value 
    //... 
} 

ou d'un FormCollection

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetValueExample(FormCollection form) { 
    string val = form["MyList"]; 
    //... 
} 

ou de la demande

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetValueExample(string MyList) { 
    string val = Request.Form["MyList"]; //or 
    val = Request["MyList"]; 
    //... 
} 

Si votre liste déroulante est nommée "Ma Liste".

<%= Html.DropDownList("MyList", MyItems) %> 

ou HTML droite

<select name="MyList"> 
    <option value="1">Item 1</option> 
    <option value="2">Item 2</option> 
</select> 

Le navigateur ne soumettra la valeur sélectionnée dans la liste déroulante et non toutes les autres valeurs. Pour obtenir la liste de tous les autres éléments, vous devez appeler le code qui a peuplé la liste en premier lieu (en supposant que vous avez utilisé Html.DropDownList()).

Mise à jour

[AcceptVerbs(Http.Get)] 
public ActionResult GetValueExample() { 
    ViewData["MyItems"] = GetSelectList(); 
    return View(); 
} 

[AcceptVerbs(Http.Get)] 
public ActionResult GetValueExample(string MyList) { 
    //MyList contains the selected value 
    SelectList list = GetSelectList(); //list will contain the original list of items 
    //... 
} 

private SelectList GetSelectList() { 
    Dictionary<string, string> list = new Dictionary<string, string>(); 
    list.Add("Item 1", "1"); 
    list.Add("Item 2", "2"); 
    list.Add("Item 3", "3"); 
    return new SelectList(list, "value", "key"); 
} 

//... 

<%= Html.DropDownList("MyList", ViewData["MyItems"] as SelectList) %> 
+0

Mais, parlez-vous de l'élément sélectionné? Puis, comment puis-je récupérer tous les éléments de la liste? – Josh

+1

Comme je l'ai dit, le navigateur soumettra uniquement la valeur de l'élément sélectionné au serveur. La seule façon d'obtenir tous les éléments de la liste est de faire la même chose que vous avez fait pour les mettre dedans (peu importe ce que c'était). Voir ma mise à jour pour un exemple. –

+0

Merci pour votre réponse très complète :) – Max

1

Eh bien, il est difficile de répondre correctement depuis que vous avez donné si peu d'informations, mais En général, vous obtenez la valeur sélectionnée dans la méthode de publication du contrôleur.

Quelque chose comme cela pourrait l'expliquer mieux:

Tenir compte ayant cette dropdownlist:

//instantiate the dropdownlist in the controller method. 
    public ActionResult Create() { 
    List<string> items = new List<string>() {"first", "second", "third"}; 
    SelectList SomeSelectItems = new SelectList(items); 
    ViewData["list"] = SomeSelectItems; 
    return View();  
    } 
    <%= Html.DropDownList("DDL", (SelectList)ViewData["list"]) %> 

Dans votre contrôleur, vous obtiendrez la valeur de la dropdownlist comme ceci:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(string DDL) 
    { 
     string theValue = DDL; 
     return View(); 
    } 

Pour obtenir toutes les valeurs de la liste déroulante serait le même que de les mettre dans la liste de sélection en premier lieu. Je suppose que vous avez une méthode appelée pour remplir la liste déroulante avec des éléments. Il suffit d'appeler cette méthode depuis le contrôleur et de gérer les valeurs de manière appropriée.

+0

Qu'est-ce que certains éléments? Thats ce que je suis confus au sujet de – Josh

+0

Ah je vois, ok je vais ajouter quelques exemples de code pour vous montrer comment instancier une liste de sélection. – Robban

1

Je pense que vous devez repenser. Les valeurs de la liste déroulante doivent provenir du contrôleur et être envoyées à la vue pour être affichées dans la liste déroulante afin de permettre à l'utilisateur de sélectionner. Ensuite, le formulaire de page renvoie la valeur sélectionnée au contrôleur. Les données doivent toujours être sur le côté serveur et la vue est juste pour l'affichage.

Questions connexes