簡體   English   中英

C#MVC 4:將View中的JavaScript數組傳遞給Controller

[英]C# MVC 4: Passing JavaScript array in View to Controller

在MVC 4中,如何將View中的JavaScript數組傳遞給使用AJAX的Controller中的函數?

這似乎不起作用:

$.ajax(
        {
            type: "POST",
            url: "../Home/SaveTable",
            data: { function_param: countryArray }
        });

問題是,countryArray是JavaScript視圖中的全局數組,我在傳遞之前檢查它是否包含元素。 但是,當saveTable函數接收到數組時,該函數表示它收到了一個空字符串[]數組。

我只知道將數組從Controller傳遞給View ,你用return Json(data, JsonRequestBehavior.AllowGet);序列化復雜數據類型return Json(data, JsonRequestBehavior.AllowGet); 然后通過將其設置為“var”變量來反序列化它。

所以我可能也必須這樣做,但如何?

編輯1:

這是SaveTable函數的縮短版本:

public string SaveTable(string[] function_param)
{
    if (function_param != null && function_param > 0)
    {
       //some code                
       return "Success";
    }

    //The following code will run if it's not successful. 
    return "There must be at least one country in the Region.";
    //Yeah it's always returning this b/c function_param is null;         
 }

在序列化數組時,您需要設置traditional: true

$.ajax({
    type: "POST",
    traditional: true,
    url: "../Home/SaveTable",
    data: { function_param: countryArray }
});

找到了關於traditional: true解釋: https//stackoverflow.com/a/5497151/2419531

編輯:

如果您不想使用traditional: true ,則可以使用JSON.stringify將數據作為字符串JSON.stringify並指定contentType

$.ajax({
    type: "POST",
    url: "../Home/SaveTable",
    contentType: 'application/json',
    data: JSON.stringify({function_param: countryArray}),
});

你應該在你的控制器上使用:

public string SaveTable(object[] function_param)
{
   //some code
}

應該做的工作,它是為未來的用戶。

你的Ajax:

$.ajax({
    type: "POST",
    url: "../Home/SaveTable",
    contentType: 'application/json',
    data: {function_param: JSON.stringify(countryArray)},
});

在你的控制器中:

using Newtonsoft.Json;

    public string SaveTable(string function_param)
    {
       dynamic func_param = JsonConvert.DeserializeObject(function_param)
    }

然后你就可以在你的控制器中做一個foreach。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM