20

私は、一度にしか機能していないと思われる古いコードを見ています。

MyPage.aspx:

function GetCompanyList(officeId) {
    var companyList = document.getElementById('<%= CompanyDropDown.ClientID %>');
    if (companyList.length == 0)
        PageMethods.GetCompanyList(officeId, OnGetCompanyList);
    else
        EditCompany();
}

と:

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

コードビハインド:

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public IEnumerable<CompanyMinimum> GetCompanyList(int officeId) {
    return (
        from c in Repository.Query<Company>()
        where !c.IsDeleted && c.TypeEnumIndex == (short)CompanyRelationshipType.Hotel
        select new CompanyMinimum() {
            id = c.Id,
            desc = c.Description
        }
    ).ToList();
}

しかしPageMethods.GetCompanyList()、最初のスニペットの への呼び出しで、Chrome は次のように報告します。

PageMethods が定義されていません

これが機能しないようにするために何が変更されたかを誰でも見ることができますか?

注: 同様の質問を見つけましたが、それらはすべて、このコードがマスター ページまたはユーザー コントロールで機能しないことに関連しているように見えましたが、ここではそうではありません。

4

4 に答える 4

27

EnablePageMethods実際には、、 、および として属性付けされたPageサブクラスのメソッドとのみ対話します。publicstaticWebMethod

GetCompanyListにはそれらのうちの 2 つがあり、 である必要がありますstatic

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static IEnumerable<CompanyMinimum> GetCompanyList(int officeId) {
    // ...
}

そして、PageMethods3つすべてを持つメソッドが見つからない場合、クライアント側が未定義のままになっているのではないかと思います.

于 2013-08-14T21:17:24.567 に答える
5

次のように、jQuery を介して ASP.NET AJAX ページ メソッドを呼び出すことができます。

$.ajax({
    type: "POST",
    url: "PageName.aspx/MethodName",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        // Do something interesting here.
    }
});
于 2013-08-14T21:09:15.097 に答える
2

ページでルーティングを使用している可能性があります。次に、PageMethods を呼び出した後に実際のパスを設定する必要があります。

PageMethods.set_path("<%=ResolveUrl("~/YourPage.aspx")%>");
PageMethods.YourMethod(param, OnSuccess, OnError);
于 2013-10-04T19:58:43.370 に答える
0

私が表現すべきだと思う別の解決策からの1つの答えは、このエラーがサーバーで発生し、ローカルでは発生しない場合は、空の MyPage.aspx プレースホルダー ファイルを配置することであり、運用サーバーでも機能するようになりました。

于 2015-07-23T08:49:08.633 に答える