将数组从javascript传递给c#

时间:2012-01-15 17:09:01

标签: c# javascript arrays string

我在javascript中有一个数组,我需要将它转到我的c#webMethod。这样做的最佳方式是什么?

我的c#代码是这样的:

 [WebMethod]
public static void SaveView(string[]  myArray, string[] filter)
{
}

编辑 -

我的json数据如下所示:

{"myArray":[{"name":"Title","index":"Title","hidden":false,"id":"1","sortable":true,"searchoptions":{"sopt":["cn","eq","bw","ew"]},"width":419,"title":true,"widthOrg":150,"resizable":true,"label":"Title","search":true,"stype":"text"},{"name":"Author","index":"Author","hidden":false,"id":"3","sortable":true,"searchoptions":{"sopt":["cn","eq","bw","ew"]},"width":419,"title":true,"widthOrg":150,"resizable":true,"label":"Author","search":true,"stype":"text"}]}

但我不工作......任何想法为什么?

非常感谢。

3 个答案:

答案 0 :(得分:17)

您可以将其作为JSON字符串发送。这是一个使用jQuery的例子:

var array = [ 'foo', 'bar', 'baz' ];
$.ajax({
    url: '/foo.aspx/SaveView',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ myArray: array }),
    success: function(result) {

    }
});

如果您的Page Method返回了某些内容,您应该使用success回调中的result.d属性来获取页面方法调用的结果。

如果您不使用jQuery,则必须手动考虑发送AJAX请求时的浏览器差异。但为了实现这一点,请求中包含两个重要的事项:

  • Content-Type请求标头必须设置为application/json
  • 请求有效负载应为JSON,例如:{ myArray: [ 'foo', 'bar', 'baz' ] }

更新:

现在您已经更新了问题,似乎您不再愿意发送字符串数组。因此,定义一个与您要发送的JSON结构相匹配的模型:

public class Model
{
    public string Name { get; set; }
    public string Index { get; set; }
    public bool Hidden { get; set; }
    public int Id { get; set; }
    public bool Sortable { get; set; }
    public SearchOption Searchoptions { get; set; }
    public int Width { get; set; }
    public bool Title { get; set; }
    public int WidthOrg { get; set; }
    public bool Resizable { get; set; }
    public string Label { get; set; }
    public bool Search { get; set; }
    public string Stype { get; set; }
}

public class SearchOption
{
    public string[] Sopt { get; set; }
}

然后:

[WebMethod]
public static void SaveView(Model[] myArray)
{
}

答案 1 :(得分:2)

var xhr = new XMLHttpRequest();
xhr.open("POST", "mypage/SaveView");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ myArray: someArray }));

答案 2 :(得分:0)

这在asp.net core 2.2中对我有用,我试图将对象数组从js发送到控制器。

JS Ajax函数-

    url: '/UserManagement/Calender/CalendarPreview/',
    data: { "list": AllSchedulesarr},

控制器-

    CalendarPreview(List<CreateOrUpdateBookingSlotDtos> list)