所以我尝试将整数数组传递给控制器。
在我的Ajax调用中,如果我使用类型:“ GET”,dataType:“ HTML”,则我的整数数组不会传递给控制器。 如果我使用类型:“ POST”,数据类型:“ JSON”,则相同的ajax调用也有效,但是,我需要返回部分视图。
有什么想法吗?
这是我的代码:
控制器:
public ActionResult GetLaySimulation(int[] projectIDs)
{
var layList = LayHelper.GetLayObjects(projectIDs); //projectIDs = null if I have GET HTML in my ajax call.
return PartialView("_LaySimulation", layList);
}
正在工作的ajax调用:
$.ajax({
url: '@Url.Action("GetLaySimulation", "Admin")',
type: 'POST',
data: { projectIDs: simulationIDs },
dataType: 'JSON',
success: function (result) {
hideLoader();
$("#lay-container").html(result);
},
error: function (err) {
hideLoader();
}
});
我需要什么:
$.ajax({
url: '@Url.Action("GetLaySimulation", "Admin")',
type: 'GET',
data: { projectIDs: simulationIDs },
dataType: 'HTML',
success: function (result) {
hideLoader();
$("#lay-container").html(result);
},
error: function (err) {
hideLoader();
}
});
********************编辑*********************
JavaScript函数:
$("#lay-container").html("");
var simulationIDs = [];
var checkBoxes = $(".chk-export");
var showButton = false;
for (var i = 0; i < checkBoxes.length; i++) {
if ($(checkBoxes[i]).is(":checked") == true) {
simulationIDs.push($(checkBoxes[i]).attr("data-id"));
}
}
if (simulationIDs.length > 0) {
$(".btn-excel").fadeIn();
$("#lay-container").fadeIn();
showLoader();
$.ajax({
url: '@Url.Action("GetLaySimulation", "Admin")',
type: 'GET',
data: { projectIDs: simulationIDs },
dataType: 'HTML',
success: function (result) {
hideLoader();
$("#lay-container").html(result);
},
error: function (err) {
hideLoader();
}
});
}
答案 0 :(得分:2)
您可以使用POST类型和dataType作为html来做到这一点Don
答案 1 :(得分:1)
您可以在queryString中发送数组。 Javascrip代码:
$.ajax({
url: '@Url.Action("GetLaySimulation", "Admin")' + "?projectIDs=" + JSON.stringify(simulationIDs),
type: 'GET',
dataType: 'HTML',
success: function (result) {
hideLoader();
$("#lay-container").html(result);
},
error: function (err) {
hideLoader();
}
});
要检索int控制器:
public ActionResult GetLaySimulation()
{
var ids = HttpContext.Request.QueryString["projectIDs"];
int[] projectIDs = JsonConvert.DeserializeObject<int[]>(ids);
// Code....
}
答案 2 :(得分:0)
我找到了这样的解决方案,但不满意。 同时,我不明白为什么我可以传递一个字符串参数而不是一个数组:
public ActionResult GetLaySimulation(string ids)
{
var idsStr = ids.Split(',');
List<int> projectIDs = new List<int>();
foreach (var item in idsStr)
{
if (!string.IsNullOrEmpty(item))
projectIDs.Add(int.Parse(item));
}
var layList = LayHelper.GetLayObjects(projectIDs.ToArray());
return PartialView("_LaySimulation", layList);
}
查看:
function chkClicked() {
$("#lay-container").html("");
var simulationIDs = "";
var checkBoxes = $(".chk-export");
var showButton = false;
for (var i = 0; i < checkBoxes.length; i++) {
if ($(checkBoxes[i]).is(":checked") == true) {
simulationIDs += $(checkBoxes[i]).attr("data-id") + ",";
}
}
if (simulationIDs.length > 0) {
$(".btn-excel").fadeIn();
$("#lay-container").fadeIn();
showLoader();
$.ajax({
url: '@Url.Action("GetLaySimulation", "Admin")',
type: 'GET',
data: { ids: simulationIDs },
dataType: 'HTML',
success: function (result) {
hideLoader();
$("#lay-container").html(result);
},
error: function (err) {
hideLoader();
}
});
}
else {
$(".btn-excel").fadeOut();
$("#lay-container").fadeOut();
}
}