use*_*442 3 c# ajax asp.net-mvc jquery json
这是我的ajax,当数组有数据时,它被作为函数调用.
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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
该数组如下所示:
var exampleFormData = [];
Run Code Online (Sandbox Code Playgroud)
并且JSON目前看起来像这样有一些更多的数据,但缩短了显示目的.
"[{\"Birthdate\":\"1947-03-21\",\"ROWID\":\"000001\",\"SpecCodes\":\"987654\"}]"
Run Code Online (Sandbox Code Playgroud)
在使用ajax发送到控制器之前,此JSON被多次推入阵列.
exampleFormData.push(jsonData);
Run Code Online (Sandbox Code Playgroud)
传入此控件的控件如下所示:
public ActionResult Results(string exampleFormData)
{
var formDataList = JsonConvert.DeserializeObject<List<SampleFormData>>(exampleFormData);
return View();
}
Run Code Online (Sandbox Code Playgroud)
这里是模拟"SampleFormData"列表的类
public class SampleFormData
{
public string Birthdate { get; set; }
public string ROWID { get; set; }
public string Score { get; set; }
public string SpecCodes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样会产生500内部服务器错误.任何人都可以在此处提供有关错误操作的任何输入吗?
编辑:解决方案是完全从ajax中删除contentType行,并由Rion在响应中提供.
您提供的可能导致问题的代码需要考虑一些事项.
确保您可以正确发布
为了让Controller实际确认jQuery调用,您需要确保Controller Action使用该[HttpPost] 属性进行修饰,表明它应该用于POST调用:
[HttpPost]
public ActionResult ExamineeResults(string exampleFormData)
{
// Your code here
}
Run Code Online (Sandbox Code Playgroud)
确保您正在瞄准正确的行动
您当前的AJAX调用是针对性的Home/Results,但实际控制器操作的名称是ExamineeResults.除非您具有某些特定的路由规则,否则应使用现有名称以确保正确定位:
url: '/Home/ExamineeResults',
Run Code Online (Sandbox Code Playgroud)
此外,如果您在View中有此功能,则可以使用该Url.Action()方法解析正确的位置:
url: '@Url.Action("ExamineeResults","Home")'
Run Code Online (Sandbox Code Playgroud)
使用适当的参数
MVC将只知道如何在指定数据时正确映射数据.目前您正在发布您的内容:
data: { FormData : exampleFormData },
Run Code Online (Sandbox Code Playgroud)
这意味着您的Controller Action中的参数名称应该与该名称完全匹配(即FormData代替exampleFormData):
public ActionResult ExamineeResults(string FormData)
Run Code Online (Sandbox Code Playgroud)
将所有这些放在一起
您应该可以通过更新代码来解决此问题,如下所示:
$.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);
}
});
Run Code Online (Sandbox Code Playgroud)
以及以下控制器操作:
[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();
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看此示例,并在下面进行说明:
| 归档时间: |
|
| 查看次数: |
2786 次 |
| 最近记录: |