一度にしか機能しないと思われる古いコードを探しています。
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は定義されていません
誰もこれが機能しないように変更されたものを見ることができますか?
注:私は同様の質問を見つけましたが、これらはすべてこのコードがマスターページまたはユーザーコントロールで機能していないことに関連しているように見えましたが、ここではそうではありません。
EnablePageMethods
は、実際にPage
、public
であるstatic
サブクラスのメソッドとのみ対話します。 WebMethod
として帰属します。
GetCompanyList
には2つあり、static
である必要もあります。
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static IEnumerable<CompanyMinimum> GetCompanyList(int officeId) {
// ...
}
そして、何が起こっているのかと思うのは、すべてが3であるメソッドが見つからない場合、PageMethods
が未定義のクライアント側のままになるということです。
次のように、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.
}
});
ページでルーティングを使用している可能性があります。 PageMethodsを呼び出した後、実際のパスを設定する必要があります。
PageMethods.set_path("<%=ResolveUrl("~/YourPage.aspx")%>");
PageMethods.YourMethod(param, OnSuccess, OnError);
私が表すべきだと思う別のソリューションからの答えの1つは、このエラーがサーバーで発生するがローカルではない場合、空のMyPage.aspxプレースホルダーファイルを配置し、現在は本番サーバーでも動作することです。