在Web方法中访问JSON调用的参数

时间:2010-10-14 15:31:38

标签: c# javascript json

我不需要任何花哨或复杂的东西,我只是想将一个简单的字符串作为参数传递给我的web方法。我该怎么办?

这是Web方法调用         [的WebMethod]         public static ArrayList GetColumns(string 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>

以下是我的网络方法的精髓:

   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;

我觉得愚蠢而令人沮丧的是,这需要如此复杂和困难。

感谢Dean

3 个答案:

答案 0 :(得分:0)

如果我理解你想要什么,你只需要在你的ajax调用中将查询字符串附加到你的网址:

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

答案 1 :(得分: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;
}

success函数可以将序列化的json对象作为返回值。在回调函数中,您可以访问CustomData

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

答案 2 :(得分:0)

在ajax请求中,对于data参数,请执行以下操作:

data: "myData=" + jsonData,

然后在你的web方法中,将参数匹配为“myData”,如下所示:

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

如果名称相同,您的Web方法足够智能,可以将参数与参数匹配。一旦收到字符串,就可以反序列化它并调用非web方法来实例化自定义数据对象。