title: how to bind json data to existing viewmodel - mvc5
body: <p>I have a long strongly-typed form which its inputs are bound with viewmodel as html helpers, while i have a table that's not strongly-typed, it's generated when user clicks Add button, and i collect its data  as json. how to map json data to viewmodel and send as one unit to post action in controller in ajax call?</p>
  
  <p>view</p>
  
  <pre><code>@model SIServices.ViewModels.SODViewModel
  @using (Html.BeginForm("Initiate", "SOD", FormMethod.Post, new { id = 
    "initiateSOD" })) // enctype = "multipart/form-data"
   {
        @Html.AntiForgeryToken()
  
        ...
  
        @* form inputs as html helpers *@
        @* html table data is collected as json *@
  </code></pre>
  
  <p>javasctipt</p>
  
  <pre><code>   var cols = [];
     cols.push("DIGITAL_FILE_TYPE_ID");
     cols.push("DOCUMENT_LAPI_ID");
     var DigitalMaps = [];
     $("table#digital-map-table tbody tr").each(function () {
     data = {};
  
     var selectedDigitalMapVal = $(this).data("selectedDigitalMapVal");
     data[cols[0]] = selectedDigitalMapVal;
     var documentId = $(this).data("documentID");
     data[cols[1]] = documentId.toString();                       
     DigitalMaps.push(data);
     data = {};
  
     });
  
      var headers = { __RequestVerificationToken: 
        $('input[name="__RequestVerificationToken"]').val() };
  
                  if (DigitalMaps != null) {
                      $.ajax({
                          headers: headers,
                          url: "@Url.Action("Initiate")",
                          type: "POST",
                          cache: false,
                          contentType: "application/json; charset=utf-8",
                          data: DigitalMaps,
                          dataType: "json",
                          success: function (succ) {
                              console.log(succ);
                          },
                          error: function (err) {
                              console.log(err.statusText);
                          }
                      });
                  }
  </code></pre>
  
  <p>viewmodel</p>
  
  <pre><code>   namespace SIServices.ViewModels
     {
         public class SODViewModel
         {
            // a lot of properties - around 50
            public int? DigitalMapId { get; set; }
            public List&lt;DIGITAL_MAPS&gt; DigitalMaps { get; set; }
  </code></pre>
  
  <p>controller</p>
  
  <pre><code>    [HttpPost]
      [ValidateHeaderAntiForgeryToken]
      public ActionResult Initiate(SODViewModel vm)
      {
  </code></pre>