A closer look at a sample I found online of passing complex objects to a controller clearly indicated that I was neglecting to set the contentType when making the ajax call.
Specifically, a working call should look like this:
var jsonData = { "StartDate": selectedDate, "EndDate": selectedDate };
$.ajax(
{
url: '@Url.Action("GetMyConcertTickets", "Main")',
type: 'POST',
data: JSON.stringify(jsonData),
contentType: 'application/json',
cache: false,
success: function (data) {
populateMyConcertTicketsOnGrid(data);
}
});
If you don't tell the controller that you are passing "application/json", then I think it will expect "text/html".