web-dev-qa-db-ja.com

PageMethodsはASPXページで定義されていません

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

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は定義されていません

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

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

17
Jonathan Wood

EnablePageMethods は、実際にPagepublicであるstaticサブクラスのメソッドとのみ対話します。 WebMethodとして帰属します。

GetCompanyListには2つあり、staticである必要もあります。

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

そして、何が起こっているのかと思うのは、すべてが3であるメソッドが見つからない場合、PageMethodsが未定義のクライアント側のままになるということです。

25

次のように、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.
    }
});
3
Karl Anderson

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

PageMethods.set_path("<%=ResolveUrl("~/YourPage.aspx")%>");
PageMethods.YourMethod(param, OnSuccess, OnError);
2
cgonzalez

私が表すべきだと思う別のソリューションからの答えの1つは、このエラーがサーバーで発生するがローカルではない場合、空のMyPage.aspxプレースホルダーファイルを配置し、現在は本番サーバーでも動作することです。

0
Enkode