2014-09-20 93 views
1

我有一个JavaScript函数,如下所示:无法JSON数据发送到MVC控制器

function exportToExcel() { 
    $.ajax({ 
     url: "/eBird/ExportToExcel", 
     data: jsonSightingData, 
     type: 'POST', 
     contentType: 'application/json' 
    }); 
} 

我的MVC控制器看起来是这样的:

public ActionResult ExportToExcel(List<Entities.MyClass> data) 
{ 
    try 
    { 
     ... 
    } 
    catch (System.Exception exception) 
    { 
     ... 
    } 

MyClass的确定指标是:

public class MyClass 
    { 
     public string comName { get; set; } 
     public int howMany { get; set; } 
     public double lat { get; set; } 
     public double lng { get; set; } 
     public string locID { get; set; } 
     public string locName { get; set; } 
     public bool locationPrivate { get; set; } 
     public string obsDt { get; set; } 
     public bool obsReviewed { get; set; } 
     public bool obsValid { get; set; } 
     public string sciName { get; set; } 
    } 

该类匹配正好进入的JSON数据。问题是当我的控制器方法被调用时,'data'总是NULL。我的理解是,MVC模型绑定器会自动将JSON数据绑定到我的MyClass列表。但它似乎没有工作。

样品JSON如下:

[{"comName":"Great Black-backed Gull","lat":42.4613266,"lng":-76.5059255,"locID":"L99381","locName":"Stewart Park","locationPrivate":false,"obsDt":"2014-09-19 12:40","obsReviewed":false,"obsValid":true,"sciName":"Larus marinus"}] 
+0

你可以展示一个JSON的例子吗? – 2014-09-20 00:41:11

+0

当你在控制器动作中查看'ModelState'时,是否会看到任何错误? – 2014-09-20 00:44:32

+0

@AndrewWhitaker - ModelState.IsValue = true – 2014-09-20 00:47:29

回答

0

使用一般的物品(如JContainer) “捕捉” 的输入数据。甚至如果你不确定你得到了什么Object。 然后看看你里面有什么。 我使用外部解串器将json转换回类。 (使用的ToString(),使之可读到串行)

(试行Json.Net)

而且 - 请确保JSON没有转换成Unicode。我也遇到了一个问题。

另一种说法 - 我认为内容类型应该是application/json。 阅读:SO about json content type

-1

运行Fiddler和捕获Json发送到控制器。控制器需要一个List,但看起来像是发送单个对象。我们中的很多人都会遇到无效的东西。我会尝试运行你所拥有的。你也可以混淆控制器,并给它只是MyClass进来?