2014-11-21 45 views
0

我看到很多帖子似乎有點解決我的情況,但他們都讓我有點困惑。將JSON添加到我的控制器中的列表中

我有一個對象,我是POST到我的控制器。我的帖子來我控制器通過這樣做行不行:

$('#fileSubmit').click(function() { 
    var filesObj = []; 

    $('#fileList .files .fileName').each(function() { 
     var name = $(this).text(); 
     filesObj.push({ 'name': name }); 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "/FileUpload/ImportCommit", 
     data: filesObj, 
     dataType: "json" 
    }); 
}); 

我想然後採取JSON對象,並把它放到我的控制器列表。到目前爲止,這裏是我的,但我沒有在C#中做過很多編碼,也不知道下一步該怎麼做。

[HttpPost] 
public ActionResult ImportCommit(List<string> filenames) 
{ 

} 

我知道我的控制器方法的代碼是空白的,但我不知道下一步該怎麼做。任何幫助將非常感激。謝謝!

+0

什麼是空白?文件名參數或您的控制器方法的代碼? – RandomUs1r 2014-11-21 20:28:02

+0

對不起 - 控制器方法的代碼是空白的。 – scapegoat17 2014-11-21 20:28:38

+0

因此,如果文件名有值你完成了嗎?文件名已經是類型列表,是該列表上的listitem的類型。我把filesObj只是一個沒有屬性或屬性的JSON字符串。要處理你的列表,只需操作文件名。 – RandomUs1r 2014-11-21 20:32:13

回答

0

訣竅是要修改我AJAXPOST這樣的:

$.ajax({ 
    type: "POST", 
    url: "/dat/Controller", 
    data: JSON.stringify(filesObj), 
    contentType: "application/json", 
    traditional: true, 
    success: function (result) { 
     console.log("Success: " + result); 
    }, 
    error: function (result) { 
     console.log("Error: " + result); 
    } 
}); 

更改dataTypecontentType並添加traditional: true似乎做的伎倆我。這(我相信)的原因是因爲我發佈的實際數據在技術上不是JSON。我加了traditional: true只是爲了安全起見。

0

您通過ajax方法的數據字段發送的發佈數據需要是名稱值對。 Asp.Net將通過名稱將它們映射到Request Params集合中。例如。如果你發佈這樣一個對象,

{ 
    fileNames: JSON.stringify(arFileNames) 
}; 

然後,它可以訪問通過服務器端,

string json = HttpContext.Current.Request.Params["fileNames"]; 

如果你的JSON看起來像這樣,

"{"filenames":["somefile","somefile2","somefile3"]}" 

你可以使用newtonsoft JSON(JSON.Net)將它轉換爲由creatong一個類來表示它的字符串列表,像這樣,

public class JsonResultFileNames 
{ 
    [Newtonsoft.Json.JsonProperty(PropertyName = "filenames")] 
    public string[] FileNames { get; set; }   
} 

然後將JSON轉換爲JsonResultFileNames用,

JsonResultFileNames jsonResult = Newtonsoft.Json.JsonConvert.DeserializeObject<JsonResultFileNames>(jsonStringHere); 

然後你代表你的JSON數據是C#對象。你也可以通過這種方式變得更加複雜,但是用JSON.Net注意的重要的事情是,它完全反序列化爲一個C#表示。例如。如果你想直接反序列化爲一個字符串數組,那麼你的json應該只有一個字符串數組(沒有對象/字段名稱等)。

E.g.在我工作的地方我們有一個返回像這樣的結果的API,

{ status:{ success:true; }, customerdata { ID:{一些-GUID}, 名稱:有些客戶名稱 }}

有這個問題,是我的C#類需要組成嵌套類,如中我需要一個類來表示狀態和一個類來表示客戶數據。在做這件事情時,事情會變得很怪異,我最終得到了諸如CustomerResponse,CustomerResponseStatus,CustomerResponseData,CustomerResponseStatus和CustomerResponseData在CustomerRespnose中公開的內容,並且我將json反序列化爲CustomerResponse類型。

如果你的json只是一個字符串數組,你應該可以使用string []作爲傳入JsonConvert.Deserialize的類型,這不需要你讓響應類來保存數據。

相關問題