Javascript 将字符串数组解析为MVC方法

Javascript 将字符串数组解析为MVC方法,javascript,json,asp.net-mvc-3,Javascript,Json,Asp.net Mvc 3,我正在尝试将一个简单的guid/字符串数组解析为json json用作对我的控制器的post调用的参数 我尝试了很多不同的方法,但我无法让控制器方法看到我的列表 数组是根据复选框值生成的: $('input:checkbox').click(function () { if ($(this).attr("checked") == true) { selected.push($(this).val()); } }); 看起来还不错。

我正在尝试将一个简单的guid/字符串数组解析为json json用作对我的控制器的post调用的参数

我尝试了很多不同的方法,但我无法让控制器方法看到我的列表

数组是根据复选框值生成的:

$('input:checkbox').click(function () {
        if ($(this).attr("checked") == true) {
            selected.push($(this).val());
        }
    });
看起来还不错。 然后我尝试将其转换为JSON

$(document).ready(function () {
    $('#Summarize').click(function () {
        var arrayJson = {};
        for (i in selected) {
            arrayJson[i] = selected[i];
        }
        var json = {
            SelectedQuantities: arrayJson
        };

        $.ajax({
            url: "/MVC/Physical/SelectQuantities/@Model.TopID",
            type: "POST",
            data: JSON.stringify(json),
            dataType: "json",
            contentType: 'application/json',
            success: function (result) {
                debugger;
                if (result.status == 200)
                    location.replace = "/MVC/Physical/QuantitySummaryView/@Model.TopID"
                else {
                    //Handle error
                }

            }
        });
    });
});
我的控制器方法如下所示:

public ActionResult QuantitySummaryView(Guid id, List<String> SelectedQuantities)
{
"SelectedQuantities": {
    "0": "707c40bd-4434-41ed-80fd-4ac541a81e85",
    "1": "a8d78a4b-b107-4e1c-97b5-5d8abf530ba8",
    "2": "a19226cc-9b22-4174-97e3-bb003d4b2746"
}

}

我认为您序列化一个的次数太多了,而且您有一个太多的层。试试这个:

我删除了一个SelectedQuantity,并更改了ajax调用

$(document).ready(function () {
    $('#Summarize').click(function () {
        var arrayJson = {};
        for (i in selected) {
            arrayJson[i] = selected[i];
        }

        var json = {
            SelectedQuantities: arrayJson
        };

        $.ajax({
            url: "/MVC/Physical/QuantitySummaryView/@Model.TopID",
            type: "POST",
            data: JSON.stringify(json),
            dataType: "json",
            contentType: 'application/json'
        });
    });
});

另外,尝试Firebug,它将显示您想要的已传递到服务器,因此您可以确保创建和传递的json是正确的。

您不需要对json进行字符串化,也不需要添加双
SelectedQuantilities

$(document).ready(function () {
    $('#Summarize').click(function () {
        var arrayJson = {};
        for (var i in selected) {
            arrayJson[i] = selected[i];
        }

        var json = {
            SelectedQuantities: arrayJson
        };
        //json = JSON.stringify(json);
        $.post("/Home/QuantitySummaryView/@Model.TopID", json, true);
    });
});
但是,根据您的代码,您只能获得选中的项目数(所有项目都等于“on”),您没有任何代码可以传递已选中项目的名称,也不会传递未选中项目的名称。因此,您可能必须更改代码以处理名称/值对。

例如:

包含GUID集合的模型:

public class GuidModel
{
    public GuidModel()
    {
        Guids = new List<Guid>();

        Guids.Add(Guid.NewGuid());
        Guids.Add(Guid.NewGuid());
        Guids.Add(Guid.NewGuid());
        Guids.Add(Guid.NewGuid());
        Guids.Add(Guid.NewGuid());
    }

    public IList<Guid> Guids { get; set; }
}

我不熟悉asp.net,但您的控制器希望在参数中获得一个列表,但您的jQuery发布一个Json字符串…而不是列表。我会尝试将参数List selectedamountries更改为String selectedamountries,并将json字符串转换为控制器中的列表。希望帮助者感谢您:)这是一个很小但很重要的错误。我不需要名称,我只需要guid。我尝试实现了这个,但它仍然抱怨列表为空。我用您的示例中编辑的代码更新了我的原始问题。你介意再看一下吗?奖金信息。我可以通过使用$.post而不是字符串化来实现它。但无论是否使用stringify,它都无法通过AJAX工作。post(“/MVC/Physical/selectQuantilities/@Model.TopID”,json,函数(数据){location.href=“/MVC/Physical/QuantitySummaryView//@Model.TopID”});
<% var index = 1; %>
    <% foreach(var guid in Model.Guids) { %>
        <input type="checkbox" value="<%= guid %>" name="guid<%= index %>" />
     <%: guid %>
     <br />
     <% index++; %>
<% } %>
<br />
<input type="button" value="Summarize" id="Summarize" />    
<script type="text/javascript">
    var selected = [];

    $('input:checkbox').click(function () {
        if ($(this).attr("checked") == true) {
            selected.push($(this).val());
        }
    });

    $('#Summarize').click(function () {
        var arrayJson = {};
        for (i in selected) {
            arrayJson[i] = selected[i];
        }

        var json = {
            SelectedQuantities: arrayJson
        };
        json = JSON.stringify(json);

        $.post("/Home/QuantitySummaryView?data=" + json);
    });
</script>
[HttpPost]
public ActionResult QuantitySummaryView(string data)
{
    // Deserialize the string containing JSON serialized data
    JavaScriptSerializer jss = new JavaScriptSerializer();    
    //...
}