2016-09-30 1 views
0

je le suivant Voir Modèle:Pourquoi mon MultiSelectList ne renvoie-t-il pas les données au modèle?

public class SendGroupEmailViewModel 
{ 
    public int EmailID { get; set; } 
    public IEnumerable<SelectListItem> Roles { get; set; } 
    public int[] SelectedRoles { get; set; } 

} 

L'action du contrôleur qui envoie les informations appropriées à la vue:

var viewModel = new SendGroupEmailViewModel 
     { 
      Roles = db.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Id.ToString(), Text = rr.Name }).ToList(), 

     }; 

Puis, à mon avis:

@Html.ListBoxFor(model => model.SelectedRoles, new MultiSelectList(Model.Roles, "Value", "Text"), new { @class = "" }) 

La liste apparaît correctement dans la vue mais lorsque le formulaire avec le ListBoxFor ci-dessus est affiché SelectedRoles renvoie comme null.

Quelqu'un peut-il me dire pourquoi et comment y remédier?

+1

Quel est le type de propriété Id dans l'entité Rôle? – Shyju

+0

C'est une chaîne, merci beaucoup d'avoir signalé mon problème, je me sens assez bête! edit - Cela a évidemment résolu mon problème. – Rob

Répondre

1

Votre code semble correct. La seule raison pour laquelle cela ne fonctionnera pas est que la valeur de l'option SELECT de l'élément n'est pas de type numérique (EX: Guid/String). Dans ce cas, le classeur modèle ne pourra pas lier le tableau de valeur non numérique à un type de tableau int (qui est le type de votre propriété SelectedRoles).

La solution est de changer le type de SelectedRoles à une collection de type qui est le type de votre propriété dans l'entité IdRole.

En supposant que votre Role.Id est de string type Cela devrait résoudre le problème

public class SendGroupEmailViewModel 
{ 
    public int EmailID { get; set; } 
    public IEnumerable<SelectListItem> Roles { get; set; } 
    public string [] SelectedRoles { get; set; } 
} 

Aussi, vous n'avez pas besoin de créer un objet de MultiSelectList dans votre vue à nouveau. Vous pouvez simplement faire

@Html.ListBoxFor(model => model.SelectedRoles, Model.Roles, new { @class = "" })