2009-09-10 7 views
0

Je rencontre des problèmes avec une Listbox, je vais ajouter une validation à une page où vous ajoutez/modifiez un utilisateur, et quand la page se charge et j'ajoute une erreur d'état de modèle pour forcer Pour arrêter, il se plaint de ma liste ne contient pas de données avec une clé.Problèmes de listbox lors de la publication avec le modèle

Sur la page je:

<p> 
      <label for="Email">E-post: *</label><br /> 
      <%= Html.TextBox("Email", Model.User.Email)%> 
      <%= Html.ValidationMessage("Email", "*") %> 
     </p> 
     <p> 
      <label for="Password">Lösenord: *</label><br /> 
      <%= Html.TextBox("Password", Model.User.Password) %> 
      <%= Html.ValidationMessage("Password", "*") %> 
     </p> 
     <p> 
      Användargrupper: <br /> 
      <%= Html.ListBox("selUsergroups")%> 
      <br /> 
     </p> 

Et dans mon contrôleur je:

public ActionResult UserEdit(int? userID) 
    { 
     User u; 

     if (userID == null) 
     { 
      u = new User(); 
     } 
     else 
     { 
      u = _us.GetUsers(userID.Value).First(); 
      u.Usergroups.Load(); 
     } 

     List<int> selectedUsergroupIDs = new List<int>(); 

     foreach (Usergroup item in u.Usergroups) 
     { 
      selectedUsergroupIDs.Add(item.UsergroupID); 
     } 

     MultiSelectList UsergroupID = new MultiSelectList(_ug.GetUsergroups(), "UsergroupID", "UsergroupName", selectedUsergroupIDs); 

     ViewData["UsergroupID"] = UsergroupID; 


     return View("UserEdit", new UserAdminEditViewModel { User = u, Usergroups = _ug.GetUsergroups(), selUsergroups = new MultiSelectList(_ug.GetUsergroups(), "UsergroupID", "UsergroupName", selectedUsergroupIDs) }); 
    } 


    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult UserEdit([Bind(Include = "UserID,Username,Firstname,Surname,Email,Password")]User userobj, int[] UsergroupID, int[] selUsergroups) 
    { 

     ModelState.AddModelError("asdfasfd", "asfdasdfsfd"); 

     if (ModelState.IsValid) 
     { 
      try 
      { 
       _us.SaveUser(userobj); 

       if (UsergroupID != null) 
        _us.SaveUserUsergroups(userobj.UserID, UsergroupID); 

       return RedirectToAction("UserDetail", new { userID = userobj.UserID }); 

      } 
      catch 
      { 
       ModelState.AddModelError("SomeError", "errrrrrrrrror"); 
      } 

     } 

     return View("UserEdit", new UserAdminEditViewModel { User = userobj }); 
    } 

Et mon modèle ressemble à ceci:

public class UserAdminEditViewModel 
{ 
    public User User { get; set; } 
    public IEnumerable<Usergroup> Usergroups { get; set; } 
    public PaginatedList<User> Users { get; set; } 
    public MultiSelectList selUsergroups { get; set; } 

    public UserAdminEditViewModel() {} 
} 

J'ai essayé avec "IEnumerable Usergroups" et "public MultiSelectList selUsergroups {get; set;}", mais il se plaint encore qu'il n'y a pas de données w la clé bla qui a IEnumerable

Que faut-il faire? Je préférerais utiliser un moyen fortement typé.

Merci à l'avance

/M

Répondre

0

Vous trouverez peut-être ce lien d'une certaine utilisation What is ModelState.IsValid valid for in ASP.NET MVC in NerdDinner?

Aussi, je pense que si vous allez revenir à la même page que vous allez vouloir pour remplir à nouveau le modèle avec des données.

Avez-vous considéré une publication jQuery comme alternative si vous n'avez pas à remplir à nouveau le modèle?

+0

oui j'ai regardé cela pendant des semaines maintenant, et ne peux pas obtenir le mien pour travailler –

Questions connexes