Editing tree-like structures with ASP.MVC
<p>This is a newbie question from a person learning ASP.NET MVC 5. I'd like to create a web app screen where user can edit a tree-like data structure. I'm not sure how do it properly, while following the best practices.</p>

<p>For simplicity, let's say it's a two-level data structure, a list of drivers where each driver can drive multiple cars:</p>

<pre><code>public class Car
{
  public string Name; { get; set; }
  public string Code; { get; set; }
}

public class Driver
{
  public string FullName { get; set; }
  public List&lt;Cars&gt; { get; set; }
}

public class Model
{
  public List&lt;Driver&gt; Drivers { get; set; }
}
</code></pre>

<p>I need to be able to add/remove/edit drivers (and their cars) on the same screen. Does it mean <em>every</em> single change user makes (e.g., adding a new car, then changing its <code>Code</code>) should require a form submission (i.e., a hit to my controller) and sending back a new view to the client? </p>

<p>If so, do I need to use an MVVM framework (like Angular or Knockout) if I want to allow multiple model changes on the client side, before submitting all the updates back to my controller? Or is something that can be done with bare ASP.NET MVC?</p>

<p>Note I don't want a single-page web applications, I just want to cache user updates on the client side, before doing an HTTP post operation.</p>

<p><strong>UPDATE</strong>, so this web app currently works in classic MVC way: first a view with the list of drivers, then a view with the list of cars, then a single car. There's a separate HTTP request to render each view.</p>

<p>What I want is to let user edit the whole structure inside the same view, then hit Update button. At that moment, I expect an updated POCO model for the whole data structure to be submitted and made available inside my MVC controller. <strong>I'd like a client-side JavaScript framework (Knockout, Angular, Aurelia, etc) to handle generating and updating the <code>DefaultModelBinder</code> indexers for me, so I wouldn't have to manage the indexers manually</strong> (i.e., <code>&lt;input name="Drivers[2].Cars[1].Name" ... /&gt;</code> etc, more details in <a href="https://stackoverflow.com/q/8598214/2674222">this q/a</a>).</p>

<p>The bounty will be rewarded to an answer illustrating how to do just this, <strong>with relevant sample code</strong>.</p>