【问题标题】:How to call ASP.net web method with Array parameter from jQuery Javascript?如何使用 jQuery Javascript 中的 Array 参数调用 ASP.net Web 方法?
【发布时间】:2011-04-13 16:10:17
【问题描述】:

我有以下 ASP.net 网络方法:

[WebMethod]
public static string SaveUserNew(string id, string[] roles)
{
 doStuff(id, roles);
}

我从 jQuery Javascript 代码调用此代码,但我不知道传递数组的语法。通常,我编写 jQuery 代码来调用如下所示的 Web 方法:

        $.ajax({
             type: "POST",
             url: "someUrl.aspx?webmethod",
             data: '{"foo":"fooValue"}',
             contentType: "application/json;",
             dataType: "json",
            }

请对此有所了解。

更新:这是一个没有数组的代码示例,它确实有效:

[WebMethod]
public static string SaveUserNew(string id)
{
    return "0";
}

        var jdata = '{ "id": "3TWR3"}';

        $.ajax({
            type: "POST",
            url: "UserMgmt.aspx/SaveUserNew",
            data: jdata,
            contentType: "application/json;",
            dataType: "json",
            traditional: true                 
            }
        });

我的目的是以类似的方式编写一些代码,将数组传递给我的 web 方法。

【问题讨论】:

标签: javascript jquery arrays web-services webmethod


【解决方案1】:

将参数传递给 webmethod 有点棘手。试试这个

[WebMethod]
public static string GetPrompt(string[] name)
{

    return "Hello " + name[0] + " and " + name[1];
}

脚本

var param = "{'name':['jack', 'jill']}";
var option = {
    error: function(request, status, error) {
        alert(error);
    },
    cache: false,
    success: function(data, status) {
        alert(data.d);
    },
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: param,
    dataType: "json",
    url: "../Server/ArrayParam.aspx/GetPrompt"
};

$.ajax(option);

【讨论】:

    【解决方案2】:

    你需要
    1) 将 data 参数分配给具有属性 id 和角色的对象。
    2) 为角色属性分配一个字符串数组。
    3)在将选项传递给ajax调用时将传统设置设置为true。

    例如:

    $.ajax({              
        type: "POST",              
        url: "someUrl.aspx?webmethod",              
        data: {
            "id":"1",
            "roles":[
                "Admin",
                "Something",
                "Another Thing"
            ]
        },
        contentType: "application/json;",              
        dataType: "json", 
        traditional: true //#############################   
    } 
    

    【讨论】:

    • 我的javascript代码中确实有数组作为数组类型。我想知道将它放入数据中的最简单方法是什么...为什么要在代码中添加traditional: true
    • 当我使用此代码时,我收到以下错误:“无效的 JSON 原语:“id”
    • 查看链接jquery14.com/day-01/jquery-14#backwards了解传统参数需求。 ASP.Net
    • 您是否删除了分配给数据的值前后的单引号?
    • var jdata = { "id": "bobby", "roles": ["at_admin", "at_user"] };
    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多