繁体   English   中英

MVC通过AJAX发送列表

[英]MVC Send list through AJAX

好的,我已经看到有关此问题的大量问题,但实际上没有一个答案对我有用,这是我的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 Controller中接受字符串(不执行)

更新:由于下面的答案,我意识到缺少的是使用参数Id发送数据,如下所示:

 data: "{param1ID:"+ param1Val+"}"

我会尝试根据您的操作切换类型。

List<FilterSessionModel>

可以肯定的是,上面的方法是行不通的,我会尝试像Object这样的东西。

或者可能是一个字符串,然后我将使用newton json dll将其推入您的类列表。

问题归结为您无法确定类型,假设您在调用ajax之前正在检查数据。

**由于更多信息而进行更新。 添加错误部分,并从控制器返回时查看这些var,还启动fiddler并观察您获得的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.
    }
});

javascript或ajax调用永远不要键入强制对象。 。您需要设置控制器端参数的类型为字符串或列表,否则您还可以设置对象类型。 如果您以这种方式修改了代码,那么您的代码肯定可以正常工作!

首先,我假设您的$.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)接受,因为这只会导致以下请求:

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]属性:

[HttpPost]
public ActionResult GetFilterSession(List<FilterSessionModel> jsonFilters)
{
    //Do things

    return Json(false, JsonRequestBehavior.AllowGet);
}

我认为您正在寻找的答案在这里得到回答:

使用jQuery Ajax将对象列表传递到MVC控制器方法中

$.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
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM