Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用jQuery和ajax将int列表传递给WebMethod_Asp.net_Jquery_Ajax - Fatal编程技术网

Asp.net 使用jQuery和ajax将int列表传递给WebMethod

Asp.net 使用jQuery和ajax将int列表传递给WebMethod,asp.net,jquery,ajax,Asp.net,Jquery,Ajax,我正在处理一个网页(ASP.NET4.0),我刚刚开始简单地尝试使用这个ajax调用(我是ajax/jQuery新手),但是我在调用时遇到了一个错误。以下是js: var TestParams = new Object; TestParams.Items = new Object; TestParams.Items[0] = 1; TestParams.Items[1] = 5; TestParams.Items[2] = 10; var finalOb

我正在处理一个网页(ASP.NET4.0),我刚刚开始简单地尝试使用这个ajax调用(我是ajax/jQuery新手),但是我在调用时遇到了一个错误。以下是js:

    var TestParams = new Object;
    TestParams.Items = new Object;
    TestParams.Items[0] = 1;
    TestParams.Items[1] = 5;
    TestParams.Items[2] = 10;

var finalObj = JSON.stringify(TestParams);

var _url = 'AdvancedSearch.aspx/TestMethod';

$(document).ready(function ()
{
    $.ajax({
        type: "POST",
        url: _url,
        data: finalObj,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg)
        {
            $(".main").html(msg.d);
        },
        error: function (xhr, ajaxOptions, thrownError)
        {
            alert(thrownError.toString());
        }
    });
下面是我的代码隐藏文件中的方法:

[Serializable]
public class TestParams
{
    public List<int> Items { get; set; }
}

public partial class Search : Page
{
    [WebMethod]
    public static string TestMethod(TestParams testParams)
    {
        // I never hit a breakpoint in here
        // do some stuff
        // return some stuff
        return "";
    }
}
当我运行它时,会出现以下错误:

Microsoft JScript运行时错误:“未定义”为null或不是对象

它在错误函数上中断

我还尝试了使用最终的json构建json(基于网站上的示例):

    var TestParams = new Object;
    TestParams.Positions = new Object;
    TestParams.Positions[0] = 1;
    TestParams.Positions[1] = 5;
    TestParams.Positions[2] = 10;

    var DTO = new Object;
    DTO.positions = TestParams;

    var finalObj = JSON.stringify(DTO)

{"positions":{"Positions":{"0":1,"1":5,"2":10}}}
相同的错误消息

从网页向我的webmethod发送int列表似乎并不难。有什么想法吗

谢谢,
Jay

问题可能是您的codebehind类上缺少一个scriptservice属性,使webmethod可以从脚本访问。看看这个。

我可能错了,但看起来你应该试试这个:

[Serializable]
public class TestParams
{
    public List<int> Items { get; set; }
}

public partial class Search : Page
{
    [WebMethod]
    public static string TestMethod(List<int> finalObj)
    {
        TestParams testParams = new TestParams { Items = finalObj };

        //Use whatever method you have to return the testParams as JSON 
        return testParams;
    }
}

希望这有帮助:)

我试过这个,它在.NET3.5中运行。不同之处在于,序列化后的数组类似于项:[1,2] In.aspx

In.cs

[WebMethod]     
    public static string TestMethod(TestParams i)     
    {


        return "whaever";     
    } 
我从这里得到了线

var serializer = new JavaScriptSerializer();

        var param = new TestParams();
        var list = new List<int> {1, 2};

        param.Items = list;

        string serializedString = serializer.Serialize(param);
var serializer=newJavaScriptSerializer();
var param=新的TestParams();
var list=新列表{1,2};
参数项=列表;
string serializedString=serializer.Serialize(param);

希望这有帮助。

更改“TestParams.Items=new Object();” 到


很抱歉JavaScript上的格式错误。我不知道这是怎么回事。不过我不是在给网络服务打电话,所以不是这样。另外,如果我只是从ajax调用中传递一个字符串(比如数据:{something:'blah'}),那么我的代码就可以工作,假设我的WebMethod的签名是:string MethodName(string s)。正如我已经说过的,WebMethod可以从脚本中访问,因为我可以用一个更简单的签名来调用它,所以你的建议对我来说没有意义,所以不,我没有试过。但是,既然你花了时间试图帮助我,我想我欠你一个机会。唉,这没什么区别。问题是我无法从JavaScript中获取WebMethod的整数列表,而不是我无法将数据从C#类返回到网页。我不确定您的最后一个代码块在grand scheme中的位置以及我应该如何使用它。实际上,我想我什么都不需要你最后的代码块。问题在于我从JavaScript传递到.NET方法的json字符串的格式。这是您的字符串:{“i”:{“Items”:[1,2]}。关键是,开头括号后面的第一个字符串(“i”,在本例中)需要与方法的参数名相同,下一个字符串(“Items”)需要与类中的属性相同(因为我正在为方法的参数声明一个类)。谢谢顺便说一下,我也不能使用stringify。您只需要方括号和整数(无引号)就可以在WebMethod中得到一个列表。@birdus:我没有得到JSON类可能是因为我使用的是VS2008。我从未看到javascript中缺少参数。
var _url = 'Default.aspx/TestMethod';
            $(document).ready(
                function() {
                    $.ajax(
                    {
                        type: "POST",
                        url: _url,
                        data: '{"i":{"Items":[1,2]} }',
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(msg) {
                            $(".main").html(msg.d);
                        },
                        error: function(xhr, ajaxOptions, thrownError) {
                            debugger;
                            alert(thrownError.toString());
                        }
                    }
                    )
                }
                );
[WebMethod]     
    public static string TestMethod(TestParams i)     
    {


        return "whaever";     
    } 
var serializer = new JavaScriptSerializer();

        var param = new TestParams();
        var list = new List<int> {1, 2};

        param.Items = list;

        string serializedString = serializer.Serialize(param);
TestParams.Items = new Array();