C# 尝试使用jQuery ajax和MVC显示JSONResult时出现内部服务器错误#500
控制器C# 尝试使用jQuery ajax和MVC显示JSONResult时出现内部服务器错误#500,c#,asp.net-mvc,json,jquery,asp.net-ajax,C#,Asp.net Mvc,Json,Jquery,Asp.net Ajax,控制器 public JsonResult TeamInfo(string teamName) { teamDA = new TeamDataAccess(); var teamInfo = teamDA.TeamInfo(teamName); System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
public JsonResult TeamInfo(string teamName)
{
teamDA = new TeamDataAccess();
var teamInfo = teamDA.TeamInfo(teamName);
System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(teamInfo);
JsonResult jsonResult
=new JsonResult(){ JsonRequestBehavior = JsonRequestBehavior.AllowGet };
jsonResult.Data = sJSON; // first i give this.
jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return jsonResult;
}
从jQuery调用控制器
$.ajax({
url: 'Team/TeamInfo/' + teamName,
success: function (data) {
$('#teamDetails').html(data);
alert('Load was performed.');
$("#dialog-modal").dialog("open");
}
});
在调试过程中,我可以看到它一直执行到controllerreturn jsonResult中的最后一行代码>但警报(“已执行加载”)代码>不可见。
你知道它没有进入成功部分的原因吗。服务器端没有错误。非常感谢您的帮助
编辑
当我在ajax调用中添加错误时。它显示错误500(内部服务器错误)。如何查找此问题?的默认请求类型为GET
,但默认情况下,在JsonResult
上不允许GET请求,因此您需要使用以下属性来允许它们:
JsonResult jsonResult =
new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet };
jsonResult.Data = sJSON;
return jsonResult;
或者,您可以使用类型:“POST”发布ajax调用。
注意:仍然不清楚您将返回的JSON直接放入DOM中的目标是什么,行为$('#teamDetails').html(数据)
的默认请求类型为GET
,但默认情况下,在JsonResult
上不允许GET请求,因此您需要使用以下属性来允许它们:
JsonResult jsonResult =
new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet };
jsonResult.Data = sJSON;
return jsonResult;
或者,您可以使用类型:“POST”发布ajax调用。
注意:仍然不清楚您将返回的JSON直接放入DOM中的目标是什么,行为$('#teamDetails').html(数据)代码>您不需要使用JavaScriptSerializer制作所有序列化内容
您的操作方法可能如下所示:
public JsonResult TeamInfo(string teamName)
{
return Json(new TeamDataAccess()TeamInfo(teamName), JsonRequestBehavior.AllowGet);
}
您不需要使用JavaScriptSerializer制作所有序列化内容
您的操作方法可能如下所示:
public JsonResult TeamInfo(string teamName)
{
return Json(new TeamDataAccess()TeamInfo(teamName), JsonRequestBehavior.AllowGet);
}
如果直接将结果作为HTML放入页面的DOM中,为什么要发回JsonResult
?尝试注释掉$('#teamDetails').html(数据)代码>。。。。看看发生了什么,没什么。它只是在控制器中完成了功能,并没有进入成功状态。是否需要添加到我的代码中?从浏览器调用您的操作,而不是通过ajax调用。服务器将为您返回错误页面。或者在调试模式下运行。是的,我遇到了问题此请求已被阻止,因为在GET请求中使用此请求时,可能会向第三方网站披露敏感信息
。请查看我的更新代码如果直接将结果作为HTML放入页面的DOM中,为什么要发回JsonResult
?尝试注释掉$('#teamDetails').html(数据)代码>。。。。看看发生了什么,没什么。它只是在控制器中完成了功能,并没有进入成功状态。是否需要添加到我的代码中?从浏览器调用您的操作,而不是通过ajax调用。服务器将为您返回错误页面。或者在调试模式下运行。是的,我遇到了问题此请求已被阻止,因为在GET请求中使用此请求时,可能会向第三方网站披露敏感信息
。请看我的更新代码,我试过了。但事实并非如此。让我再检查一下。在将其放入div之前,我需要创建一些HTML。这不起作用:(.但是向下一个可以工作。但是为什么它不工作?@VeeKeyBee此请求已被阻止…
这是当您未设置JsonRequestBehavior.AllowGet
时得到的错误消息。因此,您的问题一直是这样的,可能应用程序未重建或浏览器缓存结果…使用e> return Json(…
将执行与创建JsonResult
和手动执行序列化基本相同的操作…我尝试了该方法。但仍然没有。让我再次检查。在将其放入div之前,我需要创建一些HTML。这不起作用:(.但是向下一个可以工作。但是为什么它不工作?@VeeKeyBee此请求已被阻止…
这是当您未设置JsonRequestBehavior.AllowGet
时得到的错误消息。因此,您的问题一直是这样的,可能应用程序未重建或浏览器缓存结果…使用e> return Json(…
将与您创建JsonResult
和手动执行序列化时所做的基本相同…它可以工作。非常感谢。但是为什么它在我的代码中不工作?我也尝试了上面的方法,但不起作用。您能告诉我有什么不同吗?它在“敏感信息…”上返回相同的错误或者其他?很有效。非常感谢。但是为什么它在我的代码中不起作用?我也尝试了上面的方法,但它不起作用。你能告诉我有什么不同吗?它在“敏感信息…”或其他方面返回相同的错误?