1

まず、ASP.NETとC#を初めて使用することから始めましょう。コードビハインドページに送信したいデータを含む単純なWebフォームがあります。アイデアは、データをキャプチャし、それをJSONオブジェクトとして分離コードメソッドに送信することです。これはJavaScript/AJAXを介して行われることに注意してください(以下のコードを参照)。コードビハインドメソッドは、データを更新するための簡単なHTTP「PUT」リクエストを実行します。.apsxページはSecureフォルダーにあります(Secure Masterを使用します)。それがメソッド呼び出しに影響するかどうかわかりませんか?

以下は私がこれまでに持っているコードです。

JavaScript / AJAX:

var saveOptions =
{
  url: "Profile.aspx/UpdateVendor",
  type: "PUT",
  dataType: 'json',
  data: JSON.stringify({ vendor: ko.mapping.toJS(vendor) }),
  contentType: "application/json",

  success: function (response)
    {
    }
}

コードビハインド:

namespace PartyAtVendors.Secure
{
  [WebService]
  public partial class Profile : System.Web.UI.Page
  {
    [WebMethod]
    public static bool UpdateVendor(PartyAtApi.Models.Vendors vendor)
    {
      return true;
    }
  }
}

アップデート:

問題は以下の通りです。codebehindメソッドは呼び出されません。コードを実行してテストし、Chromeの「要素の検査」を使用すると、次のエラーが発生します。

PUT http://localhost:50671/Secure/Profile.aspx/UpdateVendor 404 (Not Found)
4

3 に答える 3

1

このような静的メソッドは、asp.netではページメソッドと呼ばれます。

次のように、同じページで次のようにjavascriptを形成します。

string data = "{mydata:myvalue}";
PageMethods.UpdateVendor(data);

ページにScriptManagerが必要であり、PageMethodsが有効になっている必要があります

<asp:ScriptManager runat="server" EnablePageMethods="true">
</asp:ScriptManager>

ページメソッドはページで定義する必要があります。コントロール、マスターページ、またはベースページで定義することはできません。

PageMethodsはHTTPPOSTのみをサポートします(PageMethodsのjavascriptプロキシなしで呼び出した場合でも)。このセキュリティ制限の詳細は、ScottGuthrieによるこのブログ投稿で読むことができます。PUT動詞を使用すると、404エラーが発生します。

ASP.NET AJAX 1.0では、デフォルトでは、JSONを使用してWebメソッドを呼び出すときにHTTPPOST動詞のみを使用できます。

于 2013-01-21T11:34:44.447 に答える
0

webmethodとjavascriptメソッドは同じページにある必要があります。

于 2013-01-21T11:45:54.377 に答える
0

こんにちは、何が悪かったのかを整理することができました。

次のように、HTTPメソッドを「POST」に変更しただけです。

var saveOptions =
{
  url: "Profile.aspx/UpdateVendor",
  type: "POST",
  dataType: 'json',
  data: JSON.stringify({ vendor: ko.mapping.toJS(vendor) }),
  contentType: "application/json",

  success: function (response)
  {
  }
}

$.ajax(saveOptions);

これで問題が解決したようで、AJAXを使用してJSONデータをcodebehindメソッドに送信できるようになりました。

于 2013-01-22T04:53:23.267 に答える