Вы были почти там:
function PopulateTable() {
$.ajax({
url: '@Url.Action("GetCities")',
type: 'POST',
dataType: 'json',
data: $("#frmAjax").serialize(),
success: function (data) {
var target = $(".displayData tbody");
target.empty();
for (var i = 0; i < data.length; i++) {
target.append('<tr><td>' + data[i].Id + '</td><td>' + data[i].Name + '</td><td>' + data[i].Population+ '</td></tr>');
}
}
});
}
, а затем:
[ValidateAntiForgeryToken]
[HttpPost]
public JsonResult GetCities(int stateId)
{
var cities = new Service().GetCities(stateId);
return Json(cities);
}
это, очевидно, предполагает, что вы используете модель представления (которую, кстати, всегда следует использовать) и:
@Html.DropDownListFor(x => x.StateId, Model.States)
или если вы не хотите использовать модели представлений (вопреки моей рекомендации), убедитесь, что вы указали правильное имя для этого слабо типизированного помощника:
@Html.DropDownList("stateId", (SelectList)ViewBag.States)