2013-08-14 24 views
10

私は非常にですが、開発には新しい経験があります。いくつかの入力フィールドと送信ボタンがあるASPページがあります。この送信ボタンは純粋にコードビハインドファイルにメソッドを呼び出すことを意図した$ .ajaxを呼び出します。しかし、私は2つの面白いことに気づいた。まず、ajax呼び出しは、どのデータが提供されているかにかかわらず成功します。次に、responseTextフィールドはページ全体のhtmlソースです。ASP.NET jQuery Ajaxコーリングコードビハインドメソッド

私は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 pa全体ですge。私のwebconfigには、適切なセクション(htmlModuleセクションを含む)がすべてあります。私は.Net 3.5で働いています。私はどんな助けにも感謝し、また、私はこれに本当に新しいので、他人に明らかなことは私には明らかではないようです。 JavaScriptを使用してJavaScriptからasp.netコードビハインドメソッドを呼び出す方法がある場合は、それを投稿してください。ありがとう!!!

+3

は、IMOあなたは、JSON応答を取得するには、MVC、ウェブAPIやWebサービスを使用する必要があります。あなたはaspxのページでこれを行うことができますが、それはハックな解決策です。 aspxページは、Webページをレンダリングするために設計されています。 –

+1

Webサービスを作成するのは、おそらく最も単純なものです...このようなものは、それらが作られたものです。 – Nick

+0

ありがとうございます。私はそれを少し調べて、ここでより良い理解が得られたら、おそらくそれを試してみるでしょう。私はそれがこのレベルでどのように働くか知りたい。ありがとう! –

答えて

16

まず、falseを返すことをお勧めします。 JavaScriptのSubmit()メソッドの一番下に移動します(AJAXで処理しているので、送信を停止します)。そこに大きな違いがありますし、あなたのデバッグの結果が期待されていないとして理由です -

あなたは、ない成功イベント完全イベントに接続しています。また、私は署名メソッドをあなたのものと一致させたことはありません。私は常に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); 
     } 
    }); 
+0

ありがとうございます。これは問題を解決していませんが、詳細を提供しています。 contentTypeとdataTypeフィールドを除いて、successメソッドが実行され、結果はHTMLページ全体です。これらの2つのフィールドを追加すると、内部サーバーエラーでエラーイベントが発生します。また、「私は署名方法をあなたのものに合わせたことがない」と言ったとき、あなたはどういう意味ですか? –

+1

修正済み!渡されたデータは、期待していた引数と型が一致しませんでした。 –

+3

こんにちは@WilliamCustode、固定コードを投稿してください。 – RMiranda

3

これは私の問題も解決していないので、パラメータを少し変更しました。
このコードは、私の仕事:あなたはより良い方法を求めているので

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); 
    } 
}); 
関連する問題