0

DropDownListFor ne sélectionne pas l'élément SelectListItem que je spécifie doit être sélectionné. Impossible de comprendre pourquoi tous les paramètres semblent être corrects.La valeur sélectionnée n'est pas sélectionnée dans une DropDownListFor de SelectList de SelectListItems

ViewModel:

public class SchemesViewModel 
{ 
    public int SchemeId { get; set; } 
    public SelectList Schemes { get; set; } 
} 

Controller (sélectionnez la préparation de la liste):

var schemes = schemeManager.GetUserSchemes(this.UserId); 

var selectListItems = schemes.Select(x => new SelectListItem() { Value = x.Id.ToString(), Text = x.Name, Selected = (x.Id == 2) }); 

var vm = new UserSchemesViewModel() 
{ 
    Schemes = new SelectList(selectListItems, "Value", "Text", selectedValue: selectListItems.FirstOrDefault(x => x.Selected == true).Value) 
}; 

return PartialView("_UserSchemes", vm); 

Vue:

Note: Ceci est où l'option de sélection avec une valeur de 2 n'est pas sélectionné!

@Html.DropDownListFor(x => x.SchemeId, Model.Schemes) 

Répondre

0

Définition de la propriété Selected de SelectListItem est ignorée par la méthode DropDownListFor(). En interne, la méthode crée un nouveau IEnumerable<SelectListItem> en utilisant les propriétés Value de Text de votre existant SelectList et définit la nouvelle propriété Selected en fonction de la valeur de la propriété à laquelle vous vous liez. Vous devez définir la valeur SchemeId avant de transmettre le modèle à la vue.

Il est également inutile de créer un deuxième SelectList identique à votre premier (c'est juste un surcoût inutile).

Modifier votre code

public class SchemesViewModel 
{ 
    public int SchemeId { get; set; } 
    public IEnumerable<SelectListItem> Schemes { get; set; } 
} 

Contrôleur

var schemes = schemeManager.GetUserSchemes(this.UserId); 
var selectListItems = schemes.Select(x => new SelectListItem() 
{ 
    Value = x.Id.ToString(), 
    Text = x.Name 
}); 
var vm = new UserSchemesViewModel() 
{ 
    Schemes = selectListItems, 
    SchemeId = 2 
}; 
return PartialView("_UserSchemes", vm); 

Maintenant, si l'un de vos options a value="2" alors cette option sera sélectionnée lors du rendu d'abord la vue.