Ajax / PageMethod оба возвращают полный HTML-код страницы вместо того, чтобы делать webmethod и возвращаться правильно - PullRequest
0 голосов
/ 18 февраля 2019

Поэтому мне нужно составить список элементов с помощью кнопок удаления, чтобы удалить их конкретный элемент.Я настроил вызов Ajax и веб-метод в коде, как я делал ранее на этом сайте, но по какой-то причине он снова возвращает весь HTML-код страницы, а не выполняет веб-метод и возвращает то, что я хотел бы вернуть,Разочарованный Я попытался использовать метод pagemthod вместо этого, но он возвращает тот же результат, даже не выполняя мой webmethod.

Интересно, что это уже работает на нескольких других страницах, и в основном скопировать и вставить то, что у меня было, но дляпо какой-то причине на этой странице это не работает.Это означает, что я знаю, что это не проблема сервера или каких-либо httpModules в веб-конфигурации.Я пробовал решения, которые я использовал ранее на своем сайте, а именно:

form1.Action = Request.RawUrl; в верхней части функции Page_Load в codebehind из-за перезаписи URL

PageMethods.set_path("~/Inbox.aspx"); вjavascript по той же причине, что и выше

Ниже приведено предлагаемое решение для перехода в web.config, но оно просто приводит к тому, что весь сервер становится равным 500. Я не понимаю, как это могло бы помочь в любом случае, хотя, так как pagemethodsи ajax работают на других страницах моего сайта.

<system.web>
  <httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </httpModules>
</system.web>

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

Вот полный код, только для контекста:

HTML / JS:

<form id="form1" runat="server" style="text-align:left">
        <asp:ScriptManager runat="server" ID="mailSM" EnablePageMethods="true" EnablePartialRendering="true" ClientIDMode="Static" ></asp:ScriptManager>
        <input runat="server" id="maillist" type="hidden" value="" />
        <input runat="server" id="inboxhf" type="hidden" value="1" />
        <div id="mail-collection" class="main-container">
            <a id="back" class="buttons" href="/">back</a><a class="buttons" href="/sendmail">send new mail</a><a id="box" class="buttons" href="/outbox">your sent mail</a>
        </div>

        <script type="text/javascript">
            function DeleteMail(mailID, fromID, toID) {
                let pagepath = window.location.pathname.substr(1);

                PageMethods.set_path("Mailbox.aspx");
                PageMethods.DeleteMailCB(fromID, toID, pagepath, mailID, OnSuccess, OnError);
            }

            function OnSuccess(response) {
                alert(response);
                location.reload();
            }

            function OnError(response) {
                alert("e" + response);
                //OnSuccess();
            }
        </script>
    </form>

C #:

[WebMethod]
public static void DeleteMail(string fromID, string toID, string pagepath, string mailID)
{
    DB.TestForSomething();
    //above just does a basic INSERT straight into a test table in the 
    //database. since nothing is being inserted, I know this webmethod 
    //isn't getting used at all.

    return;
}

Не уверен, что мне следует делать отсюда, поскольку решения, которые я нашел, работают на других страницах, но не на этом.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Для тех, кто сталкивается с этим из будущего, кто знает, что они все сделали правильно, но все еще отказывается работать: я обнаружил, что внизу моего web.config, под всеми моими переписанными URL переписан небольшоймаленькое правило <modules><remove name=""></modules>, которое отключило ScriptModule.

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

0 голосов
/ 19 февраля 2019

Здесь я бью свой метод.Пожалуйста, смотрите комментарии в коде.

ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm4.aspx.cs" Inherits="FredWebForm.WebForm4" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
    <script type="text/javascript">
        function DeleteMail(mailID, fromID, toID) {
            let path = window.location.pathname.substr(1);
            //"inbox" or "outbox"

            //changed path for me
            //PageMethods.set_path("~/Inbox.aspx");<---did not work
            //What you had did not work
            PageMethods.set_path(path);
            PageMethods.DeleteMail(fromID, toID, path, mailID, OnSuccess, OnError);
        }
        function OnSuccess(response) {
            alert(response);
            //remarked out initially
            location.reload();
        }
        function OnError() {
            //OnSuccess();
        }
        $(function () {
            $("#theButton").click(function () {
                DeleteMail(12, 14, 16);
            })
        })
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" ID="sm" EnablePartialRendering="true" EnablePageMethods="true">
        </asp:ScriptManager>
        <div>
            <input type="button" value="Go" id="theButton" />
        </div>
    </form>
</body>
</html>

Код позади

//I am using WebForm4, but you can use a different page name
public partial class WebForm4 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        form1.Action = Request.RawUrl;
    }

    [WebMethod]
    public static string DeleteMail(string fromID, string toID, string pagepath, string mailID)
    {
        //DB.TestForSomething();
        //above just does a basic INSERT straight into a test table in the 
        //database. since nothing is being inserted, I know this webmethod 
        //isn't getting used at all.

        return "SomeData";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...