Загрузка страницы запускается вместо веб-метода - PullRequest
3 голосов
/ 26 марта 2012

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

Webmethod больше не запускается, но вместо этого запускается 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, потому что он не должен вызываться и не имеет всех необходимых данных.

EDIT:

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

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

Ответы [ 2 ]

6 голосов
/ 26 марта 2012

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

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

Поэтому я вспомнил, что опустошил сеть.config к версии barebone, которая все еще работала в 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>

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

1 голос
/ 26 марта 2012

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

...