DropDownListFor ne sélectionne pas la valeur si in for loop
À mon avis
<%= Html.DropDownListFor( x => x.Countries[ i ], Model.CountryList )%>
dans mon contrôleur
public int[ ] Countries { get; set; }
public List<SelectListItem> CountryList { get; set; }
lorsque les formulaires sont affichés, il n'y a aucun problème, la liste déroulante est remplie et les valeurs sélectionnées par l'utilisateur sont affichées. Mais quand j'essaie de charger le formulaire avec les valeurs assignées aux Pays[ ] ne pas être sélectionnée.
6 réponses
j'ai la même chose aussi. Lors de l'utilisation de foreach pour boucler une DropDownListFor (c'est-à-dire pour rendre plusieurs éléments select sur une page).
Mon travail est de définir la valeur sélectionnée dans le contrôleur plutôt que de la vue: quelque chose comme ceci:
dans le contrôleur:
public class FruitList
{
public int? selectedFruit{ get; set; }
public List<SelectListItem> fruits
{
get
{
fruitEntities F = new fruitEntities();
List<SelectListItem> list = (from o in F.Options
select new SelectListItem
{
Value = o.fruitID,
Text = o.fruit,
Selected = o.fruitID == selectedFruit
}).ToList();
return list;
}
}
}
public class ViewModel
{
public List<FruitList> collectionOfFruitLists { get; set; }
}
Dans la vue.
<table>
<% for (int i=0; i < Model.collectionOfFruitLists.Count; i++ )
{ %>
<tr>
<td><%: Html.DropDownList("fruitSelectList", collectionOfFruitLists[i].fruits, "Please select...") %></td>
</tr>
<%} %>
</table>
La chouette bits est Selected = o.fruitID == selectedFruit
dans le controller qui agit comme une instruction de cas SQL; ceci est très bien expliqué par Lance Fisher (merci de Lance, votre post m'a vraiment aidé :)
Je ne sais pas si c'est nouveau pour mv4 ou s'il existe dans la version précédente. Mais le DropDownListFor inclut un paramètre supplémentaire pour le constructeur SelectList.
SelectList(IEnumerable, String, String, Object)
Par exemple:
Html.DropDownListFor( x => x.Countries[ i ], New SelectList(Model.CountryList,"ID","Description",Model.Countries[i]))
Où ID
est le code Pays dans le CountryList
et Description
est le Nom du Pays.
je sais que cette question est un peu vieille mais je viens de rencontrer ce problème avec la boucle à travers une liste d'objets et tenter de lier les valeurs à DropDownListFor(s) dans ma vue Edit.
j'ai surmonté le problème avec une solution en ligne en utilisant la logique de certaines des solutions précédentes données par d'autres pour cette question.
Liaison à mon Modèle:
@Html.DropDownListFor(model => model.QuestionActions[i].QuestionActionTypeId,
Model.QuestionActionTypes.Select(x => new SelectListItem() { Value = x.Value, Text = x.Text, Selected = (x.Value == Model.QuestionActions[i].QuestionActionTypeId.ToString()) }).ToList(),
"Select Action Type",
new { })
Modèle.QuestionActionTypes est une SelectList qui est générée dans mon Controller.
C'est un peu un piratage, et dépendant de JavaScript, mais ça a très bien marché pour moi.
vous aurez besoin de connaître les Id des clients qui seront produits par les champs (habituellement, ceux-ci peuvent être travaillés manuellement, mais pour la sécurité Vous pouvez vouloir utiliser quelque chose comme un FieldIDFor method.
Vous avez juste besoin de définir les valeurs basées sur le modèle, dans le $(document) de jQuery.prêt:
<script type="text/javascript">
$(document).ready(function () {
@for(var i = 0; i < 5; i++)
{
<text>
$("#@Html.FieldIDFor(m => m.Countries[i])").val("@Model.Countries[i]");
</text>
}
});
</script>
une boîte de sélection envoie une seule valeur, donc le Countries
propriété ne doit pas être un tableau. Également dans votre post, il n'est pas clair où est le i
variable que vous utilisez dans votre expression lambda venant de et ceci x.CountryList
utilisé dans le helper ne compile pas x
n'est pas défini.
Modèle:
public class MyModel
{
public int SelectedCountry { get; set; }
public List<SelectListItem> CountryList { get; set; }
}
Vue:
<%= Html.DropDownListFor(x => x.SelectedCountry, Model.CountryList) %>
mise à jour:
Selon le commentaire, il semble qu'il y a plusieurs menus déroulants. Je pensez que le problème pourrait venir de la i
variable utilisée comme indice dans un for
boucle.
Vous pouvez essayer ceci à la place:
Modèle:
public class MyModel
{
public int[] Countries { get; set; }
public List<SelectListItem> CountryList { get; set; }
}
Vue:
<% foreach (var country in Model.Countries) { %>
<%= Html.DropDownListFor(x => country, Model.CountryList) %>
<% } %>
public List<PairVM<string,string>> TiposValorCobertura { get; private set; }
et dans votre vue quand vous assignez les éléments sélectionnables pour la dropdownlist dans la boucle, faites le de cette façon:
@Html.DropDownListFor(m => m.Coberturas[i].TipoLimiteInferior, new SelectList(Model.TiposValorCobertura,"Key","Description", Model.Coberturas[i].TipoLimiteIferior))
où "clé" et "Description" sont les propriétés de PairVM