c# - MVC3 POST model binding not working for particular complex model -


for reason, when post view model controller , add in model binding, ends being null. application working massive one. haven't written of code model massive add parts matter, other properties preventing model binding?

i know has been working in last little bit started not. maybe it's not model, love debugging it.

post action:

[httppost] public actionresult categories(int applicationid, sqsapplicationviewmodel model) {     // save away ids chose     _sqsapplicationcategoryservice.savecategories(applicationid, model.display_categories.where(i => i.selected).select(i => i.categoryid).tolist());      // complete step     _sqsapplicationstepservice.completestep(applicationid, sqsstep.categories);      return redirecttoaction("documents"); } 

view model:

public class sqsapplicationviewmodel : imappable {     public int id { get; set; }     public int supplierid { get; set; }     public int? sqsapprovallevelid { get; set; }      // other properties .....      public list<sqschosencategoryviewmodel> display_categories { get; set; }      // other properties ..... }   public class sqschosencategoryviewmodel {     public int categoryid { get; set; }     public string name { get; set; }     public string categoryamountstring { get; set; }     public bool selected { get; set; }      public ilist<sqsdocumentcomplianceviewmodel> documents { get; set; } } 

view:

@using (html.beginform()) {     @html.hiddenfor(m => m.id)     @if (model.display_categories != null && model.display_categories.count() > 0)     {         (var = 0; < model.display_categories.count; i++)         {             @html.hiddenfor(m => m.display_categories[i].categoryid)             @html.checkboxfor(m => m.display_categories[i].selected)             @model.display_categories[i].name         }     } } 

also, values being sent in firebug are:

id:1061 display_categories[0].categoryid:4 display_categories[0].selected:true display_categories[0].selected:false display_categories[1].categoryid:1 display_categories[1].selected:false display_categories[2].categoryid:2 display_categories[2].selected:false display_categories[3].categoryid:3 display_categories[3].selected:false display_categories[4].categoryid:6 display_categories[4].selected:true display_categories[4].selected:false display_categories[5].categoryid:8 display_categories[5].selected:false display_categories[6].categoryid:10 display_categories[6].selected:false display_categories[7].categoryid:7 display_categories[7].selected:false display_categories[8].categoryid:9 display_categories[8].selected:false display_categories[9].categoryid:11 display_categories[9].selected:false display_categories[10].categoryid:5 display_categories[10].selected:true display_categories[10].selected:false 

-------------edit----------------

i tried using following test models , worked. possible property in model hindering binding? added random ones in these , still worked.

public class testviewmodel {     public int id { get; set; }     public ilist<testsubviewmodel> display_categories { get; set; }     public string testprop { { return "asdfasdfasdf"; } }     public testsubviewmodel testgetfirst { { return     this.display_categories.firstordefault(); } } }  public class testsubviewmodel {     public int categoryid { get; set; }     public string name { get; set; }     public string categoryamountstring { get; set; }     public bool selected { get; set; }      public ilist<sqsdocumentcomplianceviewmodel> documents { get; set; } } 

so i'm going answer own question, though isn't solved as there way it.

i believe when typehint model , binds it, in background uses "tryupdatemodel()" , called in controller , reason worked. not sure if miss out on else doing way, has worked me.

also can debug might issue doing way following:

var model = new viewmodel();  var issuccess = tryupdatemodel(model);   if (!issuccess)  {      foreach (var modelstate in modelstate.values)      {         foreach (var error in modelstate.errors)         {            debug.writeline(error.errormessage);         }      }  } 

taken post: how find exceptions / errors when tryupdatemodel fails update model in asp.net mvc 3


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -