Obtenez le texte de Html.DropdownListFor… MVC3

J’ai un modèle:

public class DocumentModel { public int TypeID { get; set; } public List DocumentTypes { get; set; } } 

J’ai une vue:

  @Html.DropDownListFor(x => x.TypeID, Model.DocumentTypes, "- please select -") 

Je remplis ma liste

  var model = new DocumentModel(); model.DocumentTypes = GetDocumentTypes(); private static List GetDocumentTypes() { var items = new List { new SelectListItem {Text = @"Text #1", Value = "1"}, new SelectListItem {Text = @"Text #2", Value = "2"}, }; return items; } 

J’ai une action de contrôleur lorsque le formulaire est posté:

  [HttpPost] public void UploadDocument(DocumentModel model) { if (ModelState.IsValid) { // I want to get the text from the dropdown } } 

Comment puis-je obtenir le texte de ma liste déroulante? Merci

Vous ne pouvez pas obtenir cela facilement avec la liaison de modèle par défaut. Vous devez faire une petite solution de contournement comme celle-ci.

1) Ajouter une nouvelle propriété à votre modèle / viewmodel pour stocker le texte sélectionné

 public class DocumentModel { public int TypeID { get; set; } public List DocumentTypes { get; set; } public ssortingng SelctedType { set;get;} } 

2) Utilisez la méthode Html.HiddenFor Helper pour créer une variable masquée dans le formulaire de cette propriété.

 @Html.HiddenFor(x => x.SelctedType) 

3) Utilisez un peu de javascript pour écraser la soumission! c’est à dire; Lorsque l’utilisateur soumet le formulaire, récupérez le texte sélectionné dans la liste déroulante et définissez cette valeur comme valeur du champ Masqué.

 $(function () { $("form").submit(function(){ var selTypeText= $("#TypeID option:selected").text(); $("#SelctedType").val(selTypeText); }); }); 

Maintenant, dans votre méthode d’action HTTPPost , Ceci sera disponible dans la propriété SelectedType .

 [HttpPost] public void UploadDocument(DocumentModel model) { if(ModelState.IsValid) { ssortingng thatValue=model.SelectedType; } } 

si ce que vous voulez faire est de récupérer l’élément sélectionné alors ceci peut faire le travail:

  var selecteItem = model.DocumentTypes.Where(item=>item.Selected).FirstOrDefault(); 

À votre santé!

Sur votre modèle, j’aurais une autre chaîne –

 public ssortingng Selected{ get; set; } 

alors à votre avis:

 @Html.DropDownListFor(model => model.Selected, new SelectList(Model.DocumentTypes, "Value", "Text")) 

Je suis tombé par hasard ici en essayant de trouver le moyen d’extraire la valeur textuelle d’une SelectList pour l’afficher dans un format autre que DropDownList (je réutilise mon Edit ViewModel car il contient toutes les données nécessaires

 var text = selectList.Where(q => q.Selected == true).First().Text;