asp.net mvc 4 - MVC4 Model's binded property lost after submitting POST -


the problem have encountered although assignedusers property initialized in constructor (before leaving edit), arrives null in post edit action, after submitting form. other properties keep state.

is there other way past this, besides re-initializing property after modelstate.isvalid check (and before returning view)?

model:

 public class groupmodel {      public list<int> assigneduserids { get; set; }      public multiselectlist assignedusers { get; set; }      public groupmodel(groups group) {         var allusergroups = accountmanagementadapter.getusergroups();          assignedusers = new multiselectlist(             allusergroups             .where(usergroup => usergroup.groupid == id)             .select(usergroup => usergroup.users)             .tolist(),             "id",             "username");          assigneduserids = allusergroups              .where(usergroup => usergroup.groupid == id)              .select(usergroup => usergroup.userid)              .tolist();     } 

view:

@using (html.beginform()) { @html.listboxfor(group => group.assigneduserids, model.assignedusers) <input type="submit" value="save"/> } 

controller:

    [httpget]     public actionresult edit(int id) {         groupmodel groupmodel = new groupmodel(accountmanagementadapter.getgroups().firstordefault(group => group.id == id));         return view(groupmodel);     }      [httppost]     public actionresult edit(groupmodel group) {         if (modelstate.isvalid) {             group = new groupmodel(accountmanagementadapter.updateusersforgroup(group.id, group.assigneduserids));             viewbag.success = true;         }          return view(group);     } 

you're not posting data in form. it's not going returned edit method. way should it, wouldn't recommend posting data form.

i make change this

model:

 public class groupmodel {      public list<int> assigneduserids { get; set; }      multiselectlist _assignedusers;     public multiselectlist assignedusers () {        return _assignedusers ?? _assignedusers = new multiselectlist(             allusergroups             .where(usergroup => usergroup.groupid == id)             .select(usergroup => usergroup.users)             .tolist(),             "id",             "username");     }     private object _allusergroups; /* not sure */     private object allusergroups {           { return _allusergroups ?? _allusergroups = accountmanagementadapter.getusergroups();     }      public groupmodel(groups group) {            assigneduserids = allusergroups                  .where(usergroup => usergroup.groupid == id)                  .select(usergroup => usergroup.userid)                  .tolist();    } 

view:

@html.listboxfor(group => group.assigneduserids, model.assignedusers()) 

or this

public class groupmodel {      public list<int> assigneduserids { get; set; }      public multiselectlist assignedusers { get; set; }      private object allusergroups     public groupmodel() {         allusergroups = accountmanagementadapter.getusergroups();         assignedusers = new multiselectlist(             allusergroups             .where(usergroup => usergroup.groupid == id)             .select(usergroup => usergroup.users)             .tolist(),             "id",             "username");     }     public groupmodel(groups group) :this() {         assigneduserids = allusergroups              .where(usergroup => usergroup.groupid == id)              .select(usergroup => usergroup.userid)              .tolist();     } 

Comments