我在我的aspx页面上使用jquery ajax方法,它会在后面的代码中调用web方法。目前webmethod需要一些参数,比如firstname,lastname,address等我从jquery ajax方法使用
data:JSON.stringify({fname:firstname,lname:lastname,city:city})
现在我的要求已被更改,以便将要传递的参数的数量和类型不固定,因为ex.parameter组合可能类似于fname,city 或者fname,城市或城市,lname或fname,lname,city或者其他什么。所以webmethod应该接受任何数字参数。我想使用数组来做,如here所述。< / p>
但我不明白如何识别传递的参数和数量 webme方法将数据插入/更新到DB.Please有人可以帮我这个吗?
感谢
答案 0 :(得分:1)
您可以在客户端使用与服务器端包含数组或多个参数数组的对象匹配的复杂类型。
非常粗略的例子
(服务器端)
//class declaration
public class MyObject
{
//values
string[] Keys;
string[] Values;
//methods
public void Add()
{...}
}
//web service - WebService.asmx
[WebMethod]
public void AddObject(MyObject NewObject)
{
NewObject.Keys.Length = ...;
NewObject.Add();
...
}
(客户端)
var MyObject= { };
MyObject.Keys = { $("#key1").val(), $("#key2").val(), ... };
MyObject.Values = { $("#val1").val(), $("#val2").val(), ... };
var DTO = { 'MyObject' : MyObject};
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "WebService.asmx/AddObject",
data: JSON.stringify(DTO),
dataType: "json"
});
上面的示例将在客户端序列化您的对象,您将能够访问服务器端的对象,就像使用new()创建它一样。
答案 1 :(得分:0)
您可以返回单个JSON字符串参数,并在Webmethod中的服务器上解析它。
这只是一种方法。另一个可能是看看你的整体设计,并考虑如何改进它,这样你就不必传递可变参数。正如你所发现的,它们可能是令人讨厌的。通常,退一步和重构可以使设计更简单,更优雅。
答案 2 :(得分:0)
您只需将参数添加到对象中,具体取决于其可用性/存在性:
var params = {};
if(city != null) {
params.city = city;
}
params.fname = $("#fname").val();
...etc...
$.ajax({
...
data:JSON.stringify(params);
...
});
答案 3 :(得分:0)
我会将webmethod传递给特定格式的字符串(可能是你第一个例子的格式)
当你在服务器上获得请求时,首先将其拆分为“,”以获取一组名称值对,然后拆分每一对以获取各个名称和值部分。
保持通话简单,您可以使用蓬松的.Net frameworks intellisense在服务器上使用复杂的代码处理它,以帮助您。
KISS =保持简单愚蠢
我的老音乐老师过去常常生活,我最近才明白为什么!!!!