Asp.net 使用jQuery和ajax将int列表传递给WebMethod
我正在处理一个网页(ASP.NET4.0),我刚刚开始简单地尝试使用这个ajax调用(我是ajax/jQuery新手),但是我在调用时遇到了一个错误。以下是js: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
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();