2010-02-15 90 views
2

我有以下的JSON类我打算用它来对我的数据库异步执行管理电话:如何通过JSON将可选参数传递给WebMethod?

<script type="text/javascript"> 

    var CalendarManager = { 

     defaultOptions: { 
      staffcode: 0,  // required 
      date: 0,   // required 
      activityCode: 0, // required 
      clientCode: null, // optional 
      contactCode: null, // optional 
      destination: '', // optional/doesn't matter 
      travelCode: null, // optional 
      miles: null,  // optional 
      overnight: false, // optional 
      notes: ''   // optional/doesn't matter 
     }, 

     createEvent: function(options) { 
      var combinedOptions = $.extend(true, {}, this.defaultOptions, options); 
      $.ajax({ 
       type: "POST", 
       url: 'calendar/calendar-manager-ajax.aspx/CreateEvent', 
       data: combinedOptions, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(data, textStatus, XMLHttpRequest) { 
        alert(textStatus + ", " + data); 
       }, 
       error: function(data, textStatus, XMLHttpRequest) { 
        alert(textStatus + ", " + data); 
       } 
      }); 
     } 
    }; 
</script> 

然后我用它在我的网页像这样:

<script type="text/javascript"> 
    CalendarManager.createEvent(); // random test 
</script> 

目前,我试图让这个AJAX调用火以下方法:

[WebMethod()] 
public static string CreateEvent(int staffcode, int date, 
    int activitycode, int? clientcode, 
    int? contactCode, string destination, 
    int? travelcode, int? miles, 
    bool overnight, string notes) 
{ 
    return null; 
} 

不幸的是,该方法CreateEvent没有得到CAL领导,我得到一个AJAX错误(设置一个断点不停止执行):如果我改变data: combinedOptionsdata: "{}"

错误,[XmlHttpRequest对象]

,并添加另一种方法来我的ASPX (如下)代码工作成功:

[WebMethod()] 
public static string CreateEvent() 
{ 
    return null; 
} 

基本上,我的问题是:我该如何指定可选参数的WebMethod提供JSON数据时?

我知道我可以将参数降低到所需的值,然后使用HttpContext.Request.Params来读取可选参数的值,但我会想我在这里尝试的方式应该已经工作了。

EDIT

该错误的XMLHttpRequest.responseText值为:

无效JSON原始:staffcode。

这是扔我更加关问题:(的气味

回答

1

固定它。有。为2个问题

首先,我的所有参数的情况下,是不正确的(注意“activityCode”而不是“activitycode”)

而且我现在也用这个。

data: JSON.stringify(combinedOptions) 

确实是愚蠢的错误,但你有它。

2

有没有这样的事情“可选”的参数。传递一个默认为未使用PARAMS。

+0

这就是我想要做的 - 在默认情况下使用'null',所以'int?'值有希望包含'null'。所有参数都已经被指定,你可以看到。 – Codesleuth 2010-02-15 16:30:15

+0

看起来像你已经在你需要的地方。真的没有办法做你的建议。我知道,我已经尝试过了。你不能有可选的参数,如果你没有参数构造端点,希望从上下文中读取它们,你将会得到一个无法识别的参数的异常。 IIRC。 – 2010-02-15 16:57:49

相关问题