Как передать необязательные параметры в WebMethod через JSON? - PullRequest
2 голосов
/ 15 февраля 2010

У меня есть следующий класс JSON, который я собираюсь использовать для асинхронного вызова управления моей базой данных:

<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 не вызывается, и я получаю ошибку AJAX (установка точки останова не останавливает выполнение):

ошибка, [объект XMLHttpRequest]

Если я изменю data: combinedOptions на data: "{}" и добавлю другой метод в мой ASPX (как показано ниже), код будет успешно работать:

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

По сути, мой вопрос: как указать необязательные параметры для WebMethod при предоставлении данных JSON?

Я знаю, что могу уменьшить параметры до требуемых значений, а затем использовать HttpContext.Request.Params для чтения значений необязательных параметров, но я бы подумал, что способ, который я здесь пробовал, должен был сработать.

EDIT

Значение XMLHttpRequest.responseText для ошибки:

Недопустимый примитив JSON: штатный код.

Это еще больше сбивает меня с толку: (

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010

Нет таких вещей, как «необязательные» параметры. Передайте значение по умолчанию для неиспользуемых параметров.

1 голос
/ 15 февраля 2010

Исправлено. Было 2 проблемы.

Во-первых, неправильный регистр всех моих параметров (обратите внимание, "код активности", а не код активности).

И я тоже сейчас использую это:

data: JSON.stringify(combinedOptions)

Глупые ошибки на самом деле, но они у вас есть.

...