通过json将javascript数组传递给C#

时间:2013-12-26 03:04:38

标签: c# asp.net json jquery json.net

我正在使用这个javascript数组:

 var exportOptions = [{
            jobName: ""},
            {exportType: ""},
            {attachToEmail: ""},
            {distributorName: ""},
            {vistaNumber: ""},
            {customerName: ""},
            {competitors: ""},
            {agreementType: ""},
            { annualPotential: "" },
            {businessCase: ""
        }];

我使用以下代码传递给ASP.NET代码隐藏(C#):

                    $.ajax({
                        type: 'POST',
                        url: 'Epad.aspx/generateReport',
                        data: "{'columnList': '" + columnList + "', 'exportOptions':" + JSON.stringify( exportOptions ) + "}",
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        async: true,
                        cache: false,
                        });

用这种方法读取C#:

public static void generateReport(string columnList, Object exportOptions) {}

columnList是一个字符串变量,我可以从C#中检索这些值,但我在调试器中看不到exportOptions的值...我可以在Object exportOptions(C#Object)中看到exportOptions数组键的名称但是从不传递值...

有人可以帮我吗?

2 个答案:

答案 0 :(得分:4)

通过这种方式解决了类似的问题:

JS代码(处理函数的一部分):

    var ords = [];
    $(".order-count-input").filter(function() {
        return $(this).val() > 0;
    }).each(function() {
        ords.push({                
            GoodsId: $(this).attr("goodsId"),
            Amount: $(this).val()
        });
    });

    var data = {
        orders: ords,
        orderId: id
    };

    var params = {            
        url: actionUrl,
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify(data),
        success: function (data) {
            window.location.replace(data.redirect);
        }
    };

    $.ajax(params);

控制器操作:

[HttpPost]
public JsonResult PostOrder(long orderId, PostOrderViewModel[] orders)

型号:

[Serializable]
public class PostOrderViewModel
{
    public long GoodsId { get; set; }

    public int Amount { get; set; }
}

答案 1 :(得分:0)

我首先会检查是否从客户端发送了值。我会使用浏览器调试器。在那里,您可以设置断点,并查看您发送的变量(JSON.stringify(exportOptions))是否具有值。

您可以使用F12按钮(来自Chrome或Firefox)并使用javascript调试器。在chrome中,您可以在“脚本”选项卡中执行此操作。在Firefox中,您可以在“来源”选项卡中执行此操作。

希望我帮忙!