2010-10-14 31 views
2

我不需要任何花哨或複雜的東西,我只是試圖將簡單的字符串作爲參數傳遞給我的Web方法。我該怎麼做?在Web方法中訪問JSON調用的參數

這裏是web方法調用 [的WebMethod] 公共靜態的ArrayList GetColumns(字符串TorVName)

這裏是JSON電話:

<script type="text/javascript" language="javascript"> 
    var qs = new Querystring(); 
    var v1 = qs.get("TorVName"); 
    var jsonData = JSON.stringify(v1); 
     $().ready(function() { 
      $.ajax({ 
       type: "POST", 
       url: "Default.aspx/GetColumns", 
       data: jsonData, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(msg) { 
     var optString = '<option value="-1">Select Column</option>'; 

     $.each(msg.d, function(index, item) { 
     optString += '<option value="' + item + '">' + item + '</option>'; 
     }); 
     $('select[name^=DDLColumns]').html(optString); 
       }, 
       error: function() { 
        alert("Failed to load columns"); 
       } 
      }); 
     }); 
</script> 

這裏是我的Web方法的精髓:

public static ArrayList GetColumns(string TorVName) 
    { 
     String cnstr = "myconnectstring"; 
     //string TorVName = System.Web.HttpContext.Current.Request.QueryString["TableOrViewName"]; 
     //string TorVName = "Aged"; 
     //JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     string TorVName = System.Web.HttpContext.Current.Request.QueryString["TOrVName"].ToString(); 
     string Sql = String.Empty; 

我認爲它的愚蠢和令人沮喪,這需要如此複雜和困難。

感謝院長

回答

0

在你的Ajax請求,數據參數,像這樣做:

data: "myData=" + jsonData, 

然後在您的Web方法,匹配參數「 myData「是這樣的:

[WebMethod()] 
public static ArrayList GetColumns(string myData) 
{ 
.....Your code 
} 

如果名稱相同,您的web方法足夠聰明,可以將參數與參數相匹配。一旦你收到你的字符串,那麼你可以反序列化它,並調用你的非webmethod實例化你的自定義數據對象。

0

如果我知道你想什麼,你只需要在查詢字符串您的網址添加在你的Ajax調用:

url: "Default.aspx/GetColumns?param=value", 
+0

另一方面,我如何在我的web方法中訪問這個? – Lyle 2010-10-14 15:46:36

+0

Request.QueryString [「param」]; – brpaz 2010-10-14 16:03:04

+0

不認爲它那麼容易,我的web方法不理解Request.QueryString ..試試:string TorVName = System.Web.HttpContext.Current.Request.QueryString [「TOrVName」]。ToString();沒有運氣:( – Lyle 2010-10-14 18:43:04

0

我不明白你想要什麼。無論如何,從我的角度來看,我看到你正在使用JQuery。我寫了一個JQuery插件來更簡單地調用ajax方法。 http://www.4shared.com/file/Y72VBeLc/PageMethod.html
用法:
$.PageMethod('PageMethodName', successFunction, failFunction, 'param1', param1, 'param2', param2, ...);
一個例子:

的Javascript:

var myName = 'TestName'; 
var myId = '123'; 
$.PageMethod('ReturnCustomData', onSuccess, onFail, 'MyName', myName,'MyID', myId); 

代碼背後:

public class CustomData 
{ 
    public string name; 
    public int id; 
} 

[WebMethod()] 
public static CustomData ReturnCustomData(string MyName, int MyID) 
{ 
    CustomData MyData = new CustomData(); 
    MyData.name = MyName; 
    MyData.id = MyID; 
    return MyData; 
} 

成功函數可以有一個序列化JSON,你可以從這裏下載對象作爲返回值。在你的回調函數,你可以訪問的CustomData

function onSuccess(response) 
    { 
     alert('Your Name: ' + response.d.name + ', Your ID: ' + response.d.id); 
    } 
    function onFail(response) 
    { 
     alert("An error occurred."); 
    } 
+0

如果你不知道我想要什麼你爲什麼發佈? – Lyle 2010-10-14 15:45:10

+3

@Lyle如果你不能表達你想要的,爲什麼你發佈一個問題?:) – bzlm 2010-10-14 16:02:32

+0

@Lyle,正如我所說,這是我從你的帖子中瞭解到的。我以爲你的意思是你的代碼複雜而困難,我想提供一個更簡單的方法。 – Kamyar 2010-10-14 16:09:22