我正在查看一些我只能假设一次工作的旧代码。
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
任何人都可以看到有什么变化可以防止这种情况发生吗?
注意:我发现了类似的问题,但它们似乎都与此代码无关,不适用于母版页或用户控件,但这并非如此。
答案 0 :(得分:25)
EnablePageMethods
实际上只与Page
,public
的{{1}}子类的方法进行交互,并归为static
。
WebMethod
有2个,而且还需要GetCompanyList
。
static
并且,我怀疑正在发生的事情是,如果它找不到任何具有全部3的方法,它将离开[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static IEnumerable<CompanyMinimum> GetCompanyList(int officeId) {
// ...
}
未定义的客户端。
答案 1 :(得分:3)
您可以通过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.
}
});
答案 2 :(得分:2)
也许您正在使用网页中的路由。然后必须在调用PageMethods后设置真实路径:
PageMethods.set_path("<%=ResolveUrl("~/YourPage.aspx")%>");
PageMethods.YourMethod(param, OnSuccess, OnError);
答案 3 :(得分:0)
我认为应该表示的另一个解决方案的一个答案是,如果您的服务器上发生此错误,但本地不是放置空的MyPage.aspx占位符文件,现在它也可以在生产服务器上运行。