好的,我已经看过很多关于这个问题的问题,但是没有一个答案对我有用,这是我的AJAX:
$.ajax({
url: "/FilterSessions/GetFilterSession",
type: "GET",
dataType: "json",
data: jsonFilters,
traditional: true,
success: function (response) {
//Haha, it's never entering here. not really.
}
});
var“jsonFilters”包含一个包含以下数据的数组:
[0] = { Path: "Test", Name: "More testing", Value: "Test Value" },
[1] = { Path: "Test", Name: "More testing", Value: "Test Value" }
这是我的控制者:
public ActionResult GetFilterSession(List<FilterSessionModel> jsonFilters)
{
//Do things
return Json(false, JsonRequestBehavior.AllowGet);
}
jsonFilters总是保持为null ...我也尝试将contentType: "application/json; charset=utf-8"
添加到AJAX调用中......但是这并没有真正做任何事情
最后,课程FilterSessionModel
的结构如下:
public class FilterSessionModel
{
public string Path { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
关于我可能缺少什么或可能发生什么的任何想法?
到目前为止我尝试过的事情:
设置“traditional:true”,设置“contentType”,使用JSON.stringify并尝试接受MVC控制器中的字符串(禁止)
更新:感谢下面的回答,我意识到缺少的是用param Id发送数据,如下所示:
data: "{param1ID:"+ param1Val+"}"
答案 0 :(得分:1)
我会尝试切换你的行动类型。
List<FilterSessionModel>
很明确上面的内容不会起作用,我会尝试像Object这样的东西。
或者可能是一个字符串,然后我会使用newton json dll进入你的List类。
问题归结为你的行动无法弄清楚类型,假设你在调用ajax之前检查你的数据。
**由于更多信息而更新。添加错误部分并从控制器返回时查看这些变量,同时启动提琴手并观察您获取的http数字。
$.ajax({
type: "POST",
url: "Servicename.asmx/DoSomeCalculation",
data: "{param1ID:"+ param1Val+"}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
UseReturnedData(msg.d);
},
error: function(x, t, m, b) {
//Look at the vars above to see what is in them.
}
});
答案 1 :(得分:1)
javascript或ajax调用从不输入对象。 。 。你需要设置控制器端参数的类型,字符串或列表,否则你也可以设置对象类型。 。如果你以这种方式修改了代码.. ..你的代码肯定有用!!!
答案 2 :(得分:0)
首先,我假设你的$.ajax
是JQuery
,而不是其他Javascript框架。如果那是错的,请纠正我。
ASP.NET MVC实际上可以按照您的要求执行操作(将通过AJAX发送的数据解析为List<FilterSessionModel>
,但似乎很难通过GET请求执行此操作。这将有助于了解您正在使用哪个版本的ASP.NET MVC,因为需要更多版本来使用旧版本。但是,我建议的应该适用于MVC 3或4。
当您使用GET请求通过JQuery发送AJAX并将其传递给JavaScript数组时,这就是您要发送到服务器的内容:
http://localhost:50195/FilterSessions/GetFilterSession?undefined=&undefined=
难怪模型为空,因为实际上没有数据被发送。
我相信ASP.NET可以接受像这样的对象(甚至是对象数组),但它不会这样做,格式化为JSON(如通过JSON.stringify),因为它只会产生以下请求:< / p>
http://localhost:50195/FilterSessions/GetFilterSession?[{%22Path%22:%22Test%22,%22Name%22:%22TestName%22,%22Value%22:%22Testing%22},{%22Path%22:%22Test%22,%22Name%22:%22TestName%22,%22Value%22:%22Testing%22}]
您可能希望这样做的方式是使用POST请求。 ASP.NET MVC实际上会接受一个JSON字符串作为POST数据,并将对其进行解码并正确解析模型。您的AJAX代码可以通过一些修改来正常工作:
$.ajax({
url: "/FilterSessions/GetFilterSession",
type: "POST", //Changed to POST
dataType: "json",
data: JSON.stringify(jsonFilters), //Pack data in a JSON package.
contentType: "application/json; charset=utf-8", //Added so ASP recognized JSON
traditional: true,
success: function (response) {
alert('Success!');
}
});
您发布的控制器应该已经识别POST数据,但如果没有,则只需要一个简单的[HttpPost]
属性:
[HttpPost]
public ActionResult GetFilterSession(List<FilterSessionModel> jsonFilters)
{
//Do things
return Json(false, JsonRequestBehavior.AllowGet);
}
答案 3 :(得分:0)
答案 4 :(得分:0)
$.ajax({
url: "/FilterSessions/GetFilterSession",
type: "GET",
dataType: "json",
data:JSON.stringify({ 'jsonFilters': jsonFilters}),
contentType: 'application/json; charset=utf-8',
success: function (response) {
//Do your action
}
});