asp.net mvc - Binding collections in MVC -
i have view model consists of applicant
object , teammember
collection. when post model team collection null. i've tried changing collection original ienumarable
list
didn't make difference. changed controllers edit action accept formcollection
, , verified there data in viewmodel["member.firstname"]
. i'm lost why binding isn't working. tried clean out code samples as possible i'm confused @ i'm missing. appreciated!
view model properties
public class myviewmodel { public applicant applicantinfo { get; set; } public list<teammember> teammembers { get; set; } }
controller
[httppost] public actionresult edit(myviewmodel viewmodel) { // viewmodel.applicantinfo has form data // viewmodel.teammembers = null }
view
<% using (html.beginform()) {%> <h3> <a href="#">applicant information</a> </h3> <label> city <%: html.textboxfor(m => model.applicantinfo.city)%> </label> <label> state <%: html.textboxfor(m => model.applicantinfo.state)%> </label> <h3> <a href="#">team</a> </h3> <div> <% foreach (var member in model.teammembers) { %> <div class="editor-field"> <%: html.dropdownlist("member.type", model.getmembertypes(member.membertype.typeid))%> </div> <div class="editor-field"> <%: html.editorfor(m => member.firstname)%> </div> <div class="editor-field"> <%: html.editorfor(m => member.lastname)%> </div> <div class="editor-field"> <%: html.editorfor(m => member.title)%> </div> <%} %> </div> <p> <input type="submit" value="save" /> </p> <% } %>
i believe input tags associated items in collection (when model not collection) need have index in name attribute before can bind posted data view model. here way accomplish this...
<% (int i=0; i<model.teammembers.count; i++) { %> <div class="editor-field"> <%: html.editorfor(m => m.teammembers[i].firstname)%> </div> <div class="editor-field"> <%: html.editorfor(m => m.teammembers[i].lastname)%> </div> <% } %>
i've used template suggested shea, have tad more code trying force render brackets/indexes.
<% foreach (var member in model.teammembers) { %> <%: html.editorfor(x => member, "teammember", "teammembers["+(member.number-1)+"]", new { membertypes = model.getmembertypes(member.membertype.typeid) })%> <% } %>
here old still relevant article phil haack on topic.
Comments
Post a Comment