/ / Comment renseigner des données IEnumerable dans une liste déroulante pour un modèle de vue imbriqué? - asp.net-mvc, ienumerable, html.dropdownlistfor

Comment renseigner des données IEnumerable dans une liste déroulante pour un modèle de vue imbriqué? - asp.net-mvc, ienumerable, html.dropdownlistfor

J'essaie de renseigner mes catégories dansla liste déroulante. Lorsque l'utilisateur sélectionne une catégorie, j'appelle une fonction ajax et affiche une vue partielle de l'élément sélectionné. Même si je peux renseigner les noms de catégories, je ne peux pas ajouter de valeurs respectives pour chaque catégorie. Html généré:

<select class="test" id="myDropDown" name="filterName"><option value="">
Select a category</option>
<option>Games</option>
<option>Business</option>
<option>Life</option>
<option>Health</option>
<option>Education</option>
<option>Music</option>
<option>Media</option>

Mon modèle de vue:

namespace CETAPPSUGG.Models
{
public class HomeCombinedModel
{

public IEnumerable<Apps> Apps { get; set; }
public IEnumerable<Categories> Categories { get; set; }
public IEnumerable<SubCatagories> SubCategories { get; set; }


}
}

Mon contrôleur:

public ActionResult Index()
{

var apps = db.Apps.Include(a => a.Categories).Include(a => a.SubCatagories).Include(a => a.ApplicationUser);
var categories = db.Categories.ToList();
var subcategories = db.SubCatagories.ToList();


HomeCombinedModel deneme = new HomeCombinedModel();

deneme.Apps = apps.ToList();
deneme.Categories = categories;
deneme.SubCategories = subcategories;
return View(deneme);


}

Mon avis:

 @Html.DropDownList("filterName", new SelectList(Model.Categories.Select(i => i.CategoryName).Distinct().ToList()), "Select a category", new {id = "myDropDown", @class = "test" })

@Html.DropDownListFor(
Model.Categories.Select(i => i.Id)
new SelectList(Model.Categories.Select(i => i.CategoryName).Distinct().ToList()))

Le problème est à mon avis. Comment puis-je renseigner mes éléments avec leurs valeurs d'identifiant dans dropdownlist. Je vous remercie.

Réponses:

0 pour la réponse № 1

Faire un IEnumerable de type SelectListItem.

public IEnumerable<SelectListItem> StatesList()
{
var list = new List<SelectListItem>()
{
new SelectListItem() { Text="", Value=null },
new SelectListItem() { Text="Alabama", Value="AL"},
new SelectListItem() { Text="Alaska", Value="AK"},
new SelectListItem() { Text="Arizona", Value="AZ"},
new SelectListItem() { Text="Arkansas", Value="AR"},
};
return list;
}

Ajoutez simplement votre liste déroulante à votre formulaire comme ceci.

@Html.DropDownListFor(Model => Model.Address.State, Model.StatesList())

Vous pouvez générer dynamiquement vos SelectListItems en utilisant vos listes existantes.

EDIT - Voici un exemple plus détaillé.

    public IEnumerable<Category> Categories { get; set; }
public IEnumerable<SelectListItem> CatagoriesSelectList
{
get
{
var list = new List<SelectListItem>();

foreach(Category c in Categories)
{
list.Add(new SelectListItem()
{
Text = c.Key,
Value = c.Value
});
}

return list;
}
}

public class Category
{
public string Key { get; set; }
public string Value { get; set; }
}

Dans cet exemple particulier, vous aurez besoin d’unattribut temporaire dans votre classe personnalisée, puis lorsque vous postez votre modèle, mappez-le à la catégorie correspondante et mettez à jour cette valeur. J'espère que cela à du sens.