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
Post a Comment