MVC通过AJAX发送列表

时间:2013-09-14 23:12:49

标签: c# jquery ajax asp.net-mvc

好的,我已经看过很多关于这个问题的问题,但是没有一个答案对我有用,这是我的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+"}"

5 个答案:

答案 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)

首先,我假设你的$.ajaxJQuery,而不是其他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)

我认为你要找的是这里的答案:

  

Passing A List Of Objects Into An MVC Controller Method Using jQuery Ajax

答案 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
    }
});