我基本上想要发一个ajax帖子来发送一些stateId并从该州获回一些城市列表。
<form id="frmAjax" action="#">
@Html.DropDownList("states", (SelectList)ViewBag.States)
@Html.AntiForgeryToken()
</form>
我这样做的请求是:
function PopulateTable() {
var x=$("#frmAjax").serialize();
$.ajax({
url: '@Url.Action("GetCities")',
type: 'POST',
dataType: 'json',
data: [1]
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]
public JsonResult GetCities([2])
{
var cities= new Service().GetCities(stateId);
return Json(classes);
}
我应该放什么代替[1]和[2]以便它可以工作?我基本上希望这个ajax帖子与AntiForgeryToken()和ValidateAntiForgeryToken的常规帖子一样安全。 感谢。
答案 0 :(得分:1)
你快到了那里:
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)