4

aspx ページ ファイルの 1 つにある次の webmethod を呼び出そうとしています。

[WebMethod]
public static string GetReportDetails()
{
    var reportDetails = DataAccess.Database().GetBusinessInterestReportDetails(HttpContext.Current.User.Identity.Name);
    var json = BusinessInterestReport.GetJson(reportDetails); 
    return json;
}

そして、これは私がwebmethodを呼び出すために使用しているjavascriptです:

 $.ajax({
      type: 'POST',
      url: 'SummaryReport.aspx/GetReportDetails',
      dataType: 'json',
      success: function (data) {
           alert(data);
      },
      error: function (jqXHR, textStatus, errorThrown) {
           alert('An error has occured: ' + errorThrown);
      }
 });

この ajax 呼び出しを行う JavaScript:

$('.reportOption').click(function (e) {
    $.ajax({
      type: 'POST',
      url: 'SummaryReport.aspx/GetReportDetails',
      dataType: 'json',
      success: function (data) {
           alert(data);
      },
      error: function (jqXHR, textStatus, errorThrown) {
           alert('An error has occured: ' + errorThrown);
      }
 });
})

構成はScriptModule既にweb.config. webmethod でブレーク ポイントに到達することさえなく、ページ全体のコンテンツが返されます。これの原因は何ですか?

編集:Chromeのデバッグコンソールを使用すると、次のエラーが見つかりました:

[ArgumentException: Unknown web method GetReportDetails.
Parameter name: methodName]
   System.Web.Script.Services.WebServiceData.GetMethodData(String methodName) +516665
   System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) +168
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

メソッド名を取得しないのはなぜですか? を使用して PageMethods も有効にしました<asp:ScriptManager ID="smMain" runat="server" EnablePageMethods="true" />

PS iFrame 内から呼び出していることに気付きました。これは問題と関係がありますか?

4

5 に答える 5

1

contentTypeデフォルト値はであるため、明示的に追加する必要があると思いますがapplication/x-www-form-urlencoded; charset=UTF-8、これはあなたが求めているものではありません。

そのため、jQuery コードを少し修正することをお勧めします。

$.ajax({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  url: "SummaryReport.aspx/GetReportDetails",
  dataType: "json",
  success: function (data) {
      alert(data);
  },
  error: function (jqXHR, textStatus, errorThrown) {
      alert('An error has occured: ' + errorThrown);
  }
});
于 2012-12-20T14:53:15.093 に答える
0

Webメソッドに配管コード(JSONシリアル化/逆シリアル化)を記述しないでください。モデル(.NET POCOオブジェクト)を取得/返すだけです。

[WebMethod]
public static string GetReportDetails()
{
    var reportDetails = DataAccess.Database().GetBusinessInterestReportDetails(HttpContext.Current.User.Identity.Name);
    return reportDetails;
}

そして消費する:

$.ajax({
    type: 'POST',
    url: 'SummaryReport.aspx/GetReportDetails',
    contentType: 'application/json',
    success: function (data) {
        // the actual object will be inside data.d
        var reportDetails = data.d;
        // Now you could directly use the properties of your model
        // For example if your ReportDetails .NET type had a string property
        // called FooBar you could directly alert(reportDetails.FooBar);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert('An error has occured: ' + errorThrown);
    }
});

注意事項:

  • contentType: 'application/json'トランスポートメカニズムとしてJSONを使用することをWebメソッドに示すためにを明示的に指定しました
  • jQueryはContent-Type応答ヘッダーを使用し、コールバックに渡されるパラメーターをdataType: 'json'自動的に解析するのに十分インテリジェントであるため、プロパティを削除しました。datasuccess

また、についてのこの記事を読むことをお勧めしますconsuming ASP.NET PageMethods directly from jQuery

于 2012-12-21T07:03:00.707 に答える
0

staticメソッドからキーワードを削除しますGetReportDetails

于 2012-12-21T06:34:28.080 に答える
0

この問題に関する私の経験から、ここで貢献したいと思います。コンテンツ ページまたはマスター ページを使用している場合、ページにアクセスして WebMethod を呼び出すことはできません。代わりに、Web サービス ページを追加して使用します。このリンクを参照してください。 http://forums.asp.net/post/5822511.aspx

ここにコピーしました

System.Web.Services.WebService を継承

<WebMethod()> _
Public Function MyFunction() As String
    Return "Hello World"
End Function

次に、次のようにマスター ページまたはコンテンツ ページから webmethod を呼び出すことができます。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    function MyFunction() {
        var request = $.ajax({
            type: 'POST',
            url: 'HelloWord.asmx/MyFunction',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (serverdata) {
                alert("Done  " + serverdata);
            },
            error: function (error) {
                alert("error  ");
            }
        });
        return false;
    }
</script>

Web サービス ページの System.Web.Script.Services.ScriptService 行のコメントを必ず外してください。ページの作成時にコメントが付けられるためです。

于 2016-07-24T10:39:51.383 に答える
0

修正しました。aspx ファイルの先頭で inherits 属性が欠落していることが判明しました。

だから今私は持っています:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SummaryReport.aspx.cs" MasterPageFile="~/MasterPages/SummaryReports.Master"
Inherits="Web.SummaryReport"
    %>
于 2012-12-21T08:37:10.500 に答える