C# 在MVC中传递JSON数组的Jquery ajax调用(500内部服务器错误)
这是我的ajax,它在数组有数据时作为函数调用C# 在MVC中传递JSON数组的Jquery ajax调用(500内部服务器错误),c#,jquery,json,ajax,asp.net-mvc,C#,Jquery,Json,Ajax,Asp.net Mvc,这是我的ajax,它在数组有数据时作为函数调用 function sendDataToController() { $.ajax({ type: 'POST', url: '/Home/Results', cache: false, traditional: true, contentType: "application/json", data: { FormData : exampleFor
function sendDataToController() {
$.ajax({
type: 'POST',
url: '/Home/Results',
cache: false,
traditional: true,
contentType: "application/json",
data: { FormData : exampleFormData },
success: function (data) {
alert("sent data to controller")
},
error: function (data) {
alert("Error " + data.responseText);
}
});
}
该数组如下所示:
var exampleFormData = [];
JSON现在看起来像这样,有更多的数据,但为了显示而缩短了
"[{\"Birthdate\":\"1947-03-21\",\"ROWID\":\"000001\",\"SpecCodes\":\"987654\"}]"
在使用ajax发送到控制器之前,该JSON被多次推入阵列
exampleFormData.push(jsonData);
传递到的控件如下所示:
public ActionResult Results(string exampleFormData)
{
var formDataList = JsonConvert.DeserializeObject<List<SampleFormData>>(exampleFormData);
return View();
}
实际上,这会产生一个500内部服务器错误。有人能提供任何关于这里错误操作的信息吗
编辑:解决方案是从ajax中完全删除contentType行,由Rion在响应中提供 >你所提供的代码可能有一些事情需要考虑,这可能会导致你的问题。 确保您可以正确发布 为了让您的控制器实际确认jQuery调用,您需要确保控制器操作用属性修饰,指示它应该用于
POST
调用:
[HttpPost]
public ActionResult ExamineeResults(string exampleFormData)
{
// Your code here
}
确保您的目标是正确的行动
您的AJAX调用当前的目标是Home/Results
,但是实际控制器操作的名称是examiceresults
。除非有一些特定的路由规则,否则应使用现有名称以确保正确定位:
url: '/Home/ExamineeResults',
此外,如果您的视图中有此项,则可以使用该方法来解析正确的位置:
url: '@Url.Action("ExamineeResults","Home")'
使用适当的参数
MVC将只知道如何正确地映射您指定的数据。目前,您发布的内容如下:
data: { FormData : exampleFormData },
这意味着控制器操作中的参数名称应与此完全匹配(即FormData
而不是exampleFormData
):
将所有这些放在一起
您应该能够通过如下更新代码来解决此问题:
$.ajax({
type: 'POST',
// Use Url.Action() to resolve the proper URL
url: '@Url.Action("ExamineeResults","Home")',
cache: false,
// Use JSON.parse() to serialize your content to send accross
data: { formData: JSON.parse(exampleFormData) },
success: function (data) {
alert("sent data to controller")
},
error: function (data) {
alert("Error " + data.responseText);
}
});
以及以下控制器操作:
[HttpPost]
// You can let MVC perform the binding for your by mapping your content
// to an array of your SampleFormData objects
public ActionResult ExamineeResults(SampleFormData[] formData)
{
// Do your thing here (as formData is already serialized)
return View();
}
您可以在下面进行演示:
此调用的一个问题可能是您将
视图
返回到ajax
调用。据我所知,这是不可能的。如果您必须发布此ActionResult
,则必须发布。此外,请确保您的路线是正确的。按原样运行此代码不会到达所需的端点,因为您的ActionResult
名为“检查者结果”,您的url为“/Home/Results”。希望这有帮助。我这方面的错误。我试图使这段代码对其他人有用,并从中编辑了一些内容。就路由而言,在创建mvc应用程序时,我仍然使用默认路由集。url:“{controller}/{action}/{id}”,大多数时候,如果您使用的是ajax,我使用JsonResult作为返回类型,根本不调用视图,只返回Json(myObj)。这是一种很好的方法。我只是使用OP最初发布的代码(使用更通用的ActionResult
),但是JsonResult
就可以了。这完全取决于OP希望在操作中实际执行什么操作。我的ajax位于javascript文件中,因此我必须使用“Home/Results”,但这并没有解决我的问题。我仍然收到一个内部500服务器错误。堆栈跟踪显示“无效的JSON原语:FormData”。如果这有助于解决我的问题。@user3654442您是否能够调试并进入控制器方法?您是否使用任何特定的路由配置?这很好。尽管如果您希望它指向正确的方法,您应该确保实际的控制器操作名为“Results”。如果使用我提供的代码,还可以尝试删除contentType
声明。您可以使用,它执行post并相应地映射您的类型。
$.ajax({
type: 'POST',
// Use Url.Action() to resolve the proper URL
url: '@Url.Action("ExamineeResults","Home")',
cache: false,
// Use JSON.parse() to serialize your content to send accross
data: { formData: JSON.parse(exampleFormData) },
success: function (data) {
alert("sent data to controller")
},
error: function (data) {
alert("Error " + data.responseText);
}
});
[HttpPost]
// You can let MVC perform the binding for your by mapping your content
// to an array of your SampleFormData objects
public ActionResult ExamineeResults(SampleFormData[] formData)
{
// Do your thing here (as formData is already serialized)
return View();
}