2014-09-20 96 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進來?