0

J'essaie de remplir certaines données du modèle à afficher dans une liste déroulante. Pour que j'ai créé mon modèle commeLes données requises ne s'affichent pas dans html.dropdownlist MVC

Modèle:

public class NoOfSupportingLanguages 
{ 
    public int LanguageId { get; set; } 
    public string LanguageName { get; set; } 
} 
public class OrganisationModel 
{ 
     public SelectList NoofSupportingLanguages { get; set; } 
} 

Et du côté du contrôleur, quelque chose comme ceci:

Controller:

public ActionResult Index() 
     { 
      List<NoOfSupportingLanguages> LanguageOption = new   List<NoOfSupportingLanguages>{ 
       new NoOfSupportingLanguages{ LanguageId = 1, LanguageName="English" }, 
       new NoOfSupportingLanguages{ LanguageId = 2, LanguageName="Arabic" }, 
       new NoOfSupportingLanguages{ LanguageId = 3, LanguageName="French" } 
      }; 
      SelectList languageList = new SelectList(LanguageOption, "LanguageId"); 
      model.NoofSupportingLanguages = languageList; 
      return View(model); 
     } 

Voir :

@Html.LabelFor(m => m.NoofSupportingLanguages, "Number of languages to support :") 
@Html.DropDownList("ddlNoOfSupportingLanguages", Model.NoofSupportingLanguages) 

mais dans mon menu déroulant je reçois des valeurs comme:

Web.Models.Organisation.NoOfSupportingLanguages 
Web.Models.Organisation.NoOfSupportingLanguages 
Web.Models.Organisation.NoOfSupportingLanguages 

S'il vous plaît suggérer un peu d'aide.

Merci d'avance !!

+0

@ Html.DropDownListFor (m => m.NoOfSupportingLanguages, Model.ModelName, "Sélectionner la langue"), remplacez-le par votre affichage –

Répondre

1

Si vous voulez le faire d'une manière MVC propre, vous devriez changer votre modèle:

public class OrganisationModel 
{ 
     public int SelectedLanguageId { get; set; } 
     public List<SelectListItem> NoofSupportingLanguages { get; set; } 
} 

Ensuite, dans votre contrôleur:

public ActionResult Index() 
    { 
     List<SelectListItem> LanguageOption = new List<SelectListItem>{ 
      new SelectListItem { Value = 1.ToString(), Text = "English" }, 
      new SelectListItem { Value = 2.ToString(), Text = "Arabic" }, 
      new SelectListItem { Value = 3.ToString(), Text = "French" } 
     }; 
     //here you can set selected value 
     model.SelectedLanguageId = 1; 
     model.NoofSupportingLanguages = LanguageOption; 
     return View(model); 
    } 

Et alors vous serez en mesure de le faire comme ça :

@Html.LabelFor(m => m.NoofSupportingLanguages, "Number of languages to support :") 
@Html.DropDownListFor(m => m.SelectedLanguageId, Model.NoofSupportingLanguages, "Select Language") 

maintenant, quand vous POST votre modèle il sera automatiquement lie l 'élément LanguageId sélectionné à SelectedLanguageId propriété du modèle.

2

Vous avez plusieurs erreurs avec votre code. Tout d'abord, pour générer un SelectList vous devez fournir 2 noms de propriétés (pour l'attribut value et le texte d'affichage), il doit être

SelectList languageList = new SelectList(LanguageOption, "LanguageId", "LanguageName"); 

Ensuite, vous avez besoin d'une propriété de se lier à, vous a tant besoin modèle pour contenir une autre propriété, par exemple

public int SelectedLanguage { get; set; } 

puis dans la vue de son

@Html.DropDownListFor(m => m.SelectedLanguage, Model.NoofSupportingLanguages) 

de sorte que lorsque vous soumettez le formulaire, la valeur de SelectedLanguage sera la valeur de l'option sélectionnée.

+0

Vous vous demandez toujours comment utiliser 'SelectList' ou' IEnumerable 'pour résoudre ce problème problème? –

+0

@teovankot, 'SelectList' a un succès minime car il utilise la réflexion pour générer' IEnumerable '. Mais c'est un peu plus concis, bien que certains n'aiment pas les cordes «magiques». Cela dépend vraiment de vos préférences personnelles. –

+0

@teovankot, Et dans tous les cas, je ferais toujours la propriété dans le modèle de vue 'IEnumerable ' de sorte que vous puissiez le générer de toute façon. –