web-dev-qa-db-ja.com

コードビハインドメソッドを呼び出すASP.NET jQuery Ajax

私はWeb開発の初心者veryですが、開発全般に多くの経験があります。 ASPページにはいくつかの入力フィールドと送信ボタンがあります。この送信ボタンは純粋に$ .ajaxを呼び出します。これは分離コードファイルのメソッドを呼び出すためのものです。 、私は2つの興味深いことに気付きました。1つ目は、どのデータが提供されるかに関係なくajax呼び出しが成功すること、2つ目はresponseTextフィールドがページ全体のhtmlソースであることです。

this およびwebconfigを指すその他の記事を読みましたが、これらの解決策は私の問題を解決しないようです。

ASPページは次のとおりです。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script src="TesScript.js"></script>
    <link rel="Stylesheet" type="text/css" href="TestStyle.css" />
</head>
<body>
    <div>
        <ul class="tempList">
            <li>Name:
                <input id="nameText" type="text" />
            </li>
            <li>Attending:
                <input id="yesButton" type="radio" name="attending" />
                Yes
                <input id="noButton" type="radio" name="attending" />
                No </li>
            <li>Return Address:
                <input id="returnAddressText" type="text" />
            </li>
            <li>
                <input id="submitButton" type="button" onclick="submit()" value="Submit" />
            </li>
        </ul>
    </div>
    <ul id="errorContainer" class="errorSection" runat="server" />
    <ul id="messageContainer" class="messageSection" runat="server" />
</body>
</html>

背後のコード:

using System;
using System.Web.Services;
using System.Web.UI;

namespace TestAspStuff
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }


        [WebMethod]
        public static string OnSubmit(string name, bool isGoing, string returnAddress)
        {
            return "it worked";
        }
    }
}

そしてJavaScript:

function submit() {

    var name = "my name";
    var isAttending = true;
    var returnAddress = "[email protected]";

    SendMail(name, isAttending, returnAddress);
}

function SendMail(person, isAttending, returnEmail) {

    var dataValue = { "name": person, "isGoing": isAttending, "returnAddress": returnEmail };

    $.ajax({
        type: "POST",
        url: "Default.aspx/OnSubmit",
        data: dataValue,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
        },
        complete: function (jqXHR, status) {
            alert("complete: " + status + "\n\nResponse: " + jqXHR.responseText);
        }
    });

}

これで、urlプロパティを任意の値に変更でき、エラーメソッドが呼び出されることはなく、ステータスが成功であり、responseTextがHTMLページ全体であることに気付きました。私のwebconfigには、すべての適切なセクション(htmlModuleセクションを含む)があります。私は.Net 3.5で働いています。私は助けに感謝します、そして、再び、私はこれに本当に新しいので、他の人に明らかであるものは私にはほとんど明らかではないでしょう。また、これを行うためのより良い方法(JavaScriptからasp.netコードビハインドメソッドを呼び出す場合)がある場合は、お気軽に投稿してください。ありがとう!!!

15
Will Custode

まず、おそらくreturn falseを追加する必要があります。 JavaScriptのSubmit()メソッドの最後に追加します(AJAXで処理しているため、送信を停止します)。

successイベントではなく、completeイベントに接続しています-大きな違いがあるため、デバッグ結果が期待どおりではありません。また、署名メソッドをあなたのものに一致させたことは一度もありません。また、contentTypeとdataTypeを常に提供しています。例えば:

$.ajax({
        type: "POST",
        url: "Default.aspx/OnSubmit",
        data: dataValue,                
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
        },
        success: function (result) {
            alert("We returned: " + result);
        }
    });
19
wilso132

これでも私の問題は解決されていないので、パラメーターを少し変更しました。
このコードは私のために働いた:

var dataValue = "{ name: 'person', isGoing: 'true', returnAddress: 'returnEmail' }";

$.ajax({
    type: "POST",
    url: "Default.aspx/OnSubmit",
    data: dataValue,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
    },
    success: function (result) {
        alert("We returned: " + result.d);
    }
});
7
user3824922