Chris Meek
Chris Meek

Reputation: 5839

TryUpdateModel or UpdateModel where Model Has An Array

I have a view model class that looks something like this

public class ViewModel
{
    public string Name { get; set; }
    public IList<SubViewModel> Subs { get; set; }
}

public class SubViewModel
{
    public string Name { get; set; }
    public bool IsSet { get; set; }
    public int Id { get; set; }
}

In my HTML I then have

<%= Html.TextBoxFor(x=>x.Name) %>

<% foreach(var sub in x.Subs) { %>
    <%= sub.Name %> 
    <%= Html.Checkbox("Subs["+index of current sub+"].IsSet",sub.IsSet) %>
<% } %>

In my controller code for a submit of a form surrounding these I do the following

public Save()
{
    var oldModel = GetOldModelFromSession();
    TryUpdateModel(oldModel);
    SaveModelToDb(oldModel);
}

Now when I call try update model it replaces the "Subs" list with a new one rather than just updating the IsSet property at the correct index. Is this possible to have working (I can assume that the oldModel I get is the same as the one originally sent to the page.)

Upvotes: 2

Views: 1232

Answers (1)

Brian Mains
Brian Mains

Reputation: 50728

Well, if you accept a FormCollection in the Save method, you can parse that method for each value you are looking for, since that is the collection of values submitted in a post. Or, you can create a new object, use TryUpdateModel to load the values into that object, and only copy over the values you need to the old object.

Or, you can try to replicate TryUpdateModel logic because I don't think you can change that behavior out of the box, but I could be wrong...

Upvotes: 1

Related Questions