title: Using jQuery AJAX to POST multiple variables to an ASP .NET MVC Controller
body: <p>I have a controller to which I want to POST 2 items via AJAX: a complex object (my entire viewmodel), and an integer (the id of a particular row).  This particular project is in VB .Net, but if someone can answer this in C#, that would be fine (I know both languages fairly well).  Either language would work.</p>
  
  <p>I can POST the viewmodel to the controller without any problem.  Once I try to include the integer, the controller can no longer route the request.  I know that it is probably an issue of how I am formatting the data that I POST, but I haven't been able to figure out exactly what I need to do.</p>
  
  <p>My controller action looks like:</p>
  
  <pre><code>&lt;HttpPost&gt;
  Public Function UpdateFromDate(viewModel As RetirementBenefitEstimateViewModel, estimateId) As ActionResult
      If viewModel IsNot Nothing AndAlso viewModel.Estimate IsNot Nothing AndAlso viewModel.Estimate.RetirementBenefitsEstimates IsNot Nothing Then
  
        For Each item In viewModel.Estimate.RetirementBenefitsEstimates.Where(Function(est) est.EstimateId = estimateId)
          ' this is where I update the affected row
          item.UpdateFromDate(viewModel.DateOfBirth, viewModel.EmploymentStartDate, viewModel.PersonId)
        Next item
      End If
  
      ' Get the previous ViewModel from session
      PerformSessionAction(Of RetirementBenefitEstimateViewModel)(SessionConstants.RetirementEstimate, currentEstimate, SessionAction.GetVar)
      ' update it's .Estimate property
      currentEstimate.Estimate = viewModel.Estimate
      ' save the updated ViewModel to session
      PerformSessionAction(Of RetirementBenefitEstimateViewModel)(SessionConstants.RetirementEstimate, currentEstimate, SessionAction.SetVar)
      ' finished!
      Return New HttpStatusCodeResult(HttpStatusCode.OK)
  End Function
  </code></pre>
  
  <p>The jquery AJAX call in my view looks like:</p>
  
  <pre><code>$.ajax({
          type: "POST",
          url: '@Url.Action("UpdateFromDate")',
          data: { viewModel : model, estimateId : 3 }
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          async: false,
          cache: false,
          success: function (msg) {
            //alert(JSON.stringify(msg));
            return true;
          },
          error: function (XMLHttpRequest, textStatus, errorThrown) {
            //alert(errorThrown);
            return false;
          }
        });
  </code></pre>
  
  <p>How can I POST my viewmodel and the integer (hard-coded to 3 in this example)?</p>