2010-05-12 19 views
3

我用我的aspx頁面上的jQuery AJAX方法,調用代碼將WebMethod behind.Currently將WebMethod需要使用如何從webmethod中的動態參數列表中獲取單個參數,使用jquery ajax方法發送?

幾個像名字,姓氏,地址等參數,我從jQuery的AJAX方法傳遞
data:JSON.stringify({fname:firstname,lname:lastname,city:city}) 

現在我的要求已經改變,因此,要傳遞的參數的數量和類型不是固定的,例如,參數組合可以是類似fname,城市 或fname,城市或城市,lname或fname,lname,city或其他東西。所以webmethod應該可以接受任何數量的參數。我想用數組來做到這一點,如here所述。

但我不明白我怎麼能確定哪些和有多少參數已通過 webmethod插入/更新數據到DB.Please可有人可以幫助我呢?

感謝

回答

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()創建它一樣。

0

你可以返回一個JSON字符串參數,並對其進行分析你的WebMethod內的服務器上。

這只是一種方法。另一個可能是看看你的整體設計,並考慮如何改進它,這樣你就不必傳遞可變參數。就像你發現的那樣,它們可能是討厭的。通常,逐步迴歸和重構可以導致更簡單,更優雅的設計,編程起來更容易。

+0

對不起,你能給我一個例子,我怎麼能確定哪些參數已經從$ .ajax傳遞到webmethod,在webmethod發送到BLL? – kranthi 2010-05-12 11:38:42

+0

您只需將單個字符串參數發送到您的webmethod。該字符串將包含包含所有'參數'的JSON序列化對象。在webmethod中,您反序列化此JSON字符串並編寫邏輯以將結果數據傳遞給BLL。 – 2010-05-12 15:29:00

0

您將參數只需添加到你的對象,這取決於它們的可用性/存在:

var params = {}; 
if(city != null) { 
    params.city = city; 
} 
params.fname = $("#fname").val(); 
...etc... 

$.ajax({ 
    ... 
    data:JSON.stringify(params); 
    ... 
}); 
+0

OK,會是怎樣將WebMethod的簽名?是不是像 [的WebMethod] 公共靜態無效創建(字符串市,字符串FNAME,...) { } ? – kranthi 2010-05-12 11:48:56

+0

@kranthi - 我以爲你想知道如何通過jQuery發送可變數量的參數。我真的不知道簽名會是什麼樣子。 – karim79 2010-05-12 11:52:32

+0

好的,謝謝。我真的很想知道,我該如何聲明webmethod並從已傳遞的list/array參數中獲取各個參數。 – kranthi 2010-05-12 11:55:09

0

我會通過的WebMethod在特定格式的字符串(你的第一個例子也許格式)

通過這種方式,當您首先將服務器上的請求分解到「,」時,獲取名稱值對的數組,然後拆分每對以獲取單獨的名稱和值部分。

保持通話簡單,您可以使用蓬鬆的.Net框架intellisense爲服務器上的複雜代碼處理它。

KISS =保持簡單愚蠢

我的老音樂教師使用由住,我才意識到最近爲什麼!!!!

相關問題