AJAX указывает, что WEBMETHOD был успешным, но на самом деле он никогда не запускает веб-метод для кода - PullRequest
0 голосов
/ 03 марта 2020

Я прошел через бесчисленные сообщения и не могу понять, что я делаю неправильно. У меня есть asp. net веб-сайт с кодом C#. В нем мне нужна функция javascript на странице .aspx для вызова метода на странице aspx.cs. Я написал следующий код:

.aspx page (мой ScriptManager):

 </head>
 <body id="bodycontainer">

<asp:ScriptManager ID="ScriptManager2" runat="server" EnablePartialRendering="false" EnablePageMethods="true"/>

Функция Javascript с использованием ajax на странице .aspx:

  function ValidateForm() {
        $.ajax({
            type: "POST",
            url: "default.aspx/Save",
            data: {},
            contentType: "application/json; charset=utf=8",
            //  dataType: "json",  // NOT NEEDED IF NO RETURN VALUE
            async: true,  // OPTIONAL
            success: function (msg) {
                alert("success");
            },
            error: function (msg) {
                alert("failed");
            }
        });
    }

Страница aspx.cs (страница Code Behind):

 [WebMethod]
    public static void Save()
    {
      //  throw new DivideByZeroException(); // USED THIS TO VERIFY IF WEBMETHOD IS HIT.
        _default obj = new _default();
        obj.Show("Save Method Works"); // THIS IS A POPUP MESSAGE BOX
        obj.btnSave_Click(); // THIS IS THE SAVE METHOD ON THIS PAGE THAT WE WANT TO RUN
    }


 public void btnSave_Click()
 {
 // METHODS CODE HERE
 }

Функция ValidateForm отвечает «success», однако, похоже, что она даже не запускает WebMethod в Code Behind стр. Если я использую вкладку сети Консоли IE, я вижу запрос POST. Тем не менее, в методе code code он никогда не вызывает точки останова при отладке (не уверен, следует ли это делать согласно некоторым сообщениям). В какой-то момент я вставил строку, чтобы выдать исключение DivideByZero, и оно никогда не вызывало исключение.

Итак, чтобы подвести итог, я получаю подтверждение, что он Javascript вызов WEBMETHOD работал в силу сообщения об успехе и Сообщение POST на вкладке «Сеть консоли F12». Однако, похоже, что ВЕБ-МЕТОД никогда не срабатывает. Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Не уверен, что я сделал, но я думаю, что добавление «UseHttpGet = false» позволило ему наконец выполнить веб-метод.

    [WebMethod(EnableSession = true)]
    [System.Web.Script.Services.ScriptMethod(UseHttpGet = false)]
    public static void Save()
    {
      //    throw new DivideByZeroException(); // USED THIS TO VERIFY IF WEBMETHOD IS HIT.
        _default obj = new _default();  // SINCE THIS METHOD IS STATIC, WE HAVE TO INSTANTIATE AND INSTANCE OF THE DEFAULT PAGE CLASS TO ACCESS METHODS ON THIS PAGE
        obj.Show("Save Method Works"); // THIS IS A POPUP MESSAGE BOX
        obj.btnSave_Click(); // THIS IS THE SAVE METHOD ON THIS PAGE THAT WE WANT TO RUN
    }


    function ValidateForm() {
        var text = "This is a Test";
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf=8",
            data: "{}",
            url: "default.aspx/Save",
            dataType: "json",
            success: function (msg) {
                alert("success");
            },
            error: function (XMLHttpRequest, textStatus, errorThrown){
                alert("status: " + textStatus);
                alert("Error: " + XMLHttpRequest.responseText);
            }
        });
    }
0 голосов
/ 03 марта 2020

Вы можете попробовать это, чтобы проверить ошибку, а не выдавать исключение

Response.Clear();
Response.StatusCode = 500;
Response.End;
...