在我的 ASP.NET MVC 应用程序中,我在视图的脚本部分中有这个 AJAX 调用:
$(".ckbx").change(function () {
. . .
$.ajax({
type: 'GET',
url: '@Url.Action("GetUnitReportPairVals", "Home")',
data: { unit: unitval, report: rptval },
cache: false,
success: function (result) {
alert(result);
}
});
});
单步执行被调用的 Controller 操作:
public ActionResult GetUnitReportPairVals(string unit, string report)
{
HomeModel model = new HomeModel();
int rptId = GetReportIDForName(report);
DataTable UnitReportPairEmailValsDT = new DataTable();
UnitReportPairEmailValsDT = SQL.ExecuteSQLReturnDataTable(
SQL.UnitReportPairEmailQuery,
CommandType.Text,
new SqlParameter()
{
ParameterName = "@Unit",
SqlDbType = SqlDbType.VarChar,
Value = unit
},
new SqlParameter()
{
ParameterName = "@RptID",
SqlDbType = SqlDbType.Int,
Value = rptId
}
);
model.UnitReportPairEmailVals = UnitReportPairEmailValsDT;
return View(model);
}
...一切似乎都运行良好;“模型”包含 UnitReportPairEmailVals 中的预期值。
但我从未在 Ajax 调用中看到来自此处的警报消息:
success: function (result) {
alert(result);
}
那么为什么没有达到jQuery AJAX调用的“成功”功能呢?
更新
顺便说一句,这可能是一个线索:我的 Controller 方法的最后一行:
return View(model);
...将“视图”一词涂成红色,就像罗德岛公鸡的梳子一样。但如果它不应该是那样,它应该是什么?这与我在“public ActionResult Index()”控制器动作末尾的完全相同,它工作正常。
更新 2
我将 Ajax 调用的结尾更改为:
success: function (result) {
alert(result);
},
failure: function (error) {
alert(error);
}
...以及我的 Controller 方法的结尾:
return Json(new { Result = model }, JsonRequestBehavior.AllowGet);
...但我没有得到任何警报,无论是成功还是失败。
更新 3
注意:当我尝试这个时:
var model = JSON.stringify({ unit: unitval, report: rptval });
$.ajax({
type: 'GET',
url: '@Url.Action("GetUnitReportPairVals", "Home")',
data: model,
contentType: 'application/json',
cache: false,
success: function (result) {
alert(result);
},
error: function (result) {
debugger;
}
});
...“单位”是空的,所以它根本不会飞。
当我将其更改为此(删除第 1 行并将“数据”参数更改回我之前使用的内容)时:
$.ajax({
type: 'GET',
url: '@Url.Action("GetUnitReportPairVals", "Home")',
data: { unit: unitval, report: rptval },
contentType: 'application/json',
cache: false,
success: function (result) {
alert(result);
},
error: function (result) {
alert('failed');
}
});
......“单位”是我所期望的(和“报告”,也是),但我最终看到“失败”。
更新 4
一旦我将几个不同的答案和相关问题拼凑在一起,我就在这里写了一个关于如何做到这一点的提示。
更新 5
我有这个 [工作] ajax 调用 [工作]:
var model = JSON.stringify({ unit: unitval, report: 1 });
$.ajax({
type: 'GET',
url: '@Url.Action("GetUnitDataRangeParamsVals", "UnitReportDataRangeParams")',
data: { unit: unitval, report: 1 },
contentType: 'application/json',
cache: false,
success: function (returneddata) {
populatedatarangeprams(1, returneddata);
},
error: function () {
alert('error - returneddata.error.stringify');
}
});
...但我没有使用声明的“模型”,根据我的理解,它与“contentType:'application/json'”配对
所以我想我应该做的是这样的事情:
var model = JSON.stringify({ unit: unitval, report: 1 });
$.ajax({
type: 'GET',
url: '@Url.Action("GetUnitDataRangeParamsVals", "UnitReportDataRangeParams")',
data: model,
contentType: 'application/json',
cache: false,
success: function (returneddata) {
populatedatarangeprams(1, returneddata);
},
error: function () {
alert('error - returneddata.error.stringify');
}
});
现在传递给控制器方法的数据是 json 字符串化格式(封装在“模型”中)。
但是,它甚至不起作用。
它适用于第一个块,但不适用于第二个。
所以我删除了“模型”和“内容类型”行,并将“数据”行改回原来的样子,它工作正常。那么它们是无用的,还是我错误地使用它们?