我正在查看一些旧代码,这些代码只能一次使用。
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.GetCompanyList()
未定义PageMethods
谁能看到为防止这种情况发生了什么变化?
注意:我发现了类似的问题,但它们似乎都与此代码有关,无法在母版页或用户控件中使用,在这里不是这种情况。
EnablePageMethods实际上只有一个方法相互作用Page被子类public,static及归属作为WebMethod。
EnablePageMethods
Page
public
static
WebMethod
GetCompanyList有2个,也需要是static。
GetCompanyList
[System.Web.Services.WebMethod()] [System.Web.Script.Services.ScriptMethod()] public static IEnumerable<CompanyMinimum> GetCompanyList(int officeId) { // ... }
而且,我怀疑正在发生的事情是,PageMethods如果找不到任何具有全部3种方法的方法,它将留下未定义的客户端。
PageMethods