Загрузка страницы запускается вместо веб-метода

Итак, мои веб-сайты до сих пор работали нормально, я не совсем уверен, что я изменил. У меня есть вызов jQuery AJAX, который отправляет код купона на сервер и извлекает номер (который является скидкой).

Однако веб-метод больше не запускается, вместо этого запускается Page_load страницы, на которой находится веб-метод. Почему? Что я могу проверить? Что я могу сделать?

Вот мой обработчик нажатия кнопки

$('div#code_apply_btn').click(function() {
    $(this).html('PLEASE WAIT');
    getpromocode();
});

Вот вызов AJAX

function getpromocode(){
    var pcode = $('input#input_circuitcode').val();
    var hid = parseInt($('input#ss_id_h').val());
    $.ajax({
        type: "POST",
        url: "register.aspx/get_promocode",
        data: '{"promo":"' + pcode + '", "uid":' + hid + '}',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.d != -1) {
                applydiscount(msg.d);
                $('div#reg_circuit').show();
                $('div#circuit_promo').hide();
                $('div#reg_circuit').click();
            }
            else {
                $('input#input_circuitcode').val('');
                $('div#code_apply_btn').html('APPLY CODE');
            }
        },
        error: function (msg) {
            alert(msg);
        }
    });
}

Вот веб-метод

[WebMethod]
public static int get_promocode(string promo, int uid)
{
    return DAC.GetPromoCode(promo);
}

Веб-метод никогда не вызывается, но событие Page_load срабатывает и проходит через все, а затем получает ошибку 500, потому что его не следует вызывать и у него нет всех необходимых данных.

РЕДАКТИРОВАТЬ:

Все мои другие страницы, использующие веб-методы, работают нормально. Это просто эта страница.

Еще немного странного поведения: в хроме, как только я начинаю вводить «register.aspx», вызывается Page_load. Опять же, все мои другие страницы в порядке, и этого не происходит.


person James Hay    schedule 26.03.2012    source источник
comment
Вы уверены, что вызывается этот код js, и вы не делаете полный постбэк незаметно? (например, по нажатию кнопки)   -  person Claudio Redi    schedule 26.03.2012
comment
@ClaudioRedi Я почти уверен, я обновил свой ответ обработчиком, который вызывает функцию AJAX. Возвращаемая ошибка 500 возвращается через переменную ошибки в вызове AJAX. Страница не меняется.   -  person James Hay    schedule 26.03.2012
comment
Пожалуйста, проверьте, какие переменные pcode и hid имеют перед выполнением почтового вызова.   -  person Claudio Redi    schedule 26.03.2012
comment
pcode - это то, что они ввели в текстовое поле кода. Я попробовал ввести тест, и pcode был тестом. hid — это идентификатор пользователя, хранящийся в скрытом поле, которое заполняется при первой загрузке страницы. Он также работал с номером: 246.   -  person James Hay    schedule 26.03.2012
comment
Обычно это происходит, если вы используете кнопку ASP.NET вместо кнопки html.   -  person Jude    schedule 13.10.2014
comment
Кроме того, возможно, это ваш RouteConfig (это было для меня): stackoverflow.com/questions/23014866/   -  person dlchambers    schedule 19.08.2020


Ответы (2)


Я нашел ответ на свой вопрос:

Поскольку у меня VS2008, я могу использовать только .Net 3.5. Однако на моем сервере есть .Net 4.0 или 2.0, по какой-то причине я не могу выбрать 3.5, как мне бы хотелось. Поэтому каждый раз, когда я перемещаю свой проект, мне приходится менять web.config, потому что конфигурация 3.5 по умолчанию заполнена кучей вещей, которые не нравятся 4.0.

Итак, я вспомнил, что я очистил web.config до базовой версии, которая все еще работала в 3.5, и в этом проблема. Я сузил его до этих строк, которые я исключил из версии, работающей локально на 3.5.

<httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, 
        System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
        PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

Я предполагаю, что модуль script - это то, что передает ваши запросы jQuery веб-методам, а не обработчику страницы по умолчанию. Ну вот.. Но никаких очевидных ошибок или чего-то еще, это просто не сработало.

person James Hay    schedule 26.03.2012
comment
.Net 3.5 является .Net 2.0. Есть несколько дополнительных надстроек для версии 3.5, но это та же основная среда выполнения. - person Joel Coehoorn; 26.03.2012

Вы должны иметь EnablePageMethods="true" в ScriptManager на этой странице.

person Antonio Bakula    schedule 26.03.2012
comment
У меня нет диспетчера сценариев, я не использую ASP.Net AJAX в какой-либо форме. Просто ASP.Net с jQuery. Все остальные мои страницы и их веб-методы работают. - person James Hay; 26.03.2012