我有以下的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: combinedOptions
到data: "{}"
错误,[XmlHttpRequest对象]
,并添加另一种方法来我的ASPX (如下)代码工作成功:
[WebMethod()]
public static string CreateEvent()
{
return null;
}
基本上,我的问题是:我该如何指定可选参数的WebMethod
提供JSON数据时?
我知道我可以将参数降低到所需的值,然后使用HttpContext.Request.Params
来读取可选参数的值,但我会想我在这里尝试的方式应该已经工作了。
EDIT
该错误的XMLHttpRequest.responseText
值为:
无效JSON原始:staffcode。
这是扔我更加关问题:(的气味
这就是我想要做的 - 在默认情况下使用'null',所以'int?'值有希望包含'null'。所有参数都已经被指定,你可以看到。 – Codesleuth 2010-02-15 16:30:15
看起来像你已经在你需要的地方。真的没有办法做你的建议。我知道,我已经尝试过了。你不能有可选的参数,如果你没有参数构造端点,希望从上下文中读取它们,你将会得到一个无法识别的参数的异常。 IIRC。 – 2010-02-15 16:57:49