我正在构建一个MVC 4项目,其中我显示了一个项目表及其几个状态里程碑。每个里程碑都由一个绿色,黄色或红色的单元格表示。我使用html助手构建这些单元格的内容,使用一些相当复杂的逻辑在彩色背景上显示文本内容。我想允许用户单击任何单元格并弹出一个jQuery对话框,使用局部视图显示与该状态项相关的详细信息。每个单元都有相同的css类,我用它来绑定click事件,然后向服务器发送ajax调用,传递单元的id。正在按控制器方法的预期接收呼叫但是ajax呼叫失败。 使用一个数据模型构建发送视图来填充单元格,当然我需要向局部视图发送不同的数据模型,我不知道不匹配是否是失败的原因,我不认为所以。我试图使用简单的数据进行开发只是为了使它工作,所以我尝试只发送一个值或一个键/值对作为Json并且每种方式都失败。
这是js:
$('.statusCell').click(function () {
var statusId = this.id;
alert("clicked this status: " + statusId);
var request = $.ajax({
url: "/Report/GetStatusData/",
data: {
id: statusId
}
});
request.success(function (data) {
alert("returned ajax data: " + data);
});
request.fail(function (jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
});
失败功能正如您在失败时所期望的那样显示。 这是控制器代码,我在其中尝试了几次返回尝试:
public ActionResult GetStatusData(int id)
{
return Json(new { prop = id });
//return PartialView("_displayStatus", id);
}
问题是我真的不知道我需要在详细程度上做什么。我理解一般概念,但不了解实际情况。我过去做过ajax调用,但是在其中使用带有Ajax的ActionLinks,部分视图作为成功目标。这是不同的,它让我望而却步。 我需要返回到视图以便将新数据传递到局部视图并加载它?我可以不发回我需要的模型吗?我错过了什么形式? 我可能会提到我还没有编写部分代码,因为我想先让它工作。但是我不明白为什么没有视图接收新数据应该重要,因为我没有将它们映射到一起。 我感谢任何人提供的任何帮助。
答案 0 :(得分:1)
此时请求超出范围。将成功放在click事件中。我把它放在ajax调用本身。根据数据添加
success: function(data){
alert("returned ajax data: " + data);
}
答案 1 :(得分:0)
要使JSON从控制器返回到ajax调用,必须满足以下几个条件:
我不确切知道您的ASP环境是如何工作的,但是您是否100%确定您正在创建合法的JSON并从控制器发送它?您可以在Chrome或Firefox调试器的网络选项卡中准确验证发送的内容,它将显示通过网络传输的确切数据。这通常会增加发生或可能出错的清晰度。
对于第2项,您需要控制器将请求类型设置为JSON,以便ajax调用看到它是JSON mime类型,或者您需要在ajax调用中指定dataType。如果可以的话,最好在服务器端修复它,这样它就可以自动使用jQuery ajax调用。
您可以强制执行JSON数据类型:
$('.statusCell').click(function () {
var statusId = this.id;
alert("clicked this status: " + statusId);
var request = $.ajax({
url: "/Report/GetStatusData/",
data: {
id: statusId
},
dataType: "json"
});
request.success(function (data) {
alert("returned ajax data: " + data);
});
request.fail(function (jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
});