2013-08-14 31 views
14

Tôi đang xem một số mã cũ mà tôi chỉ có thể giả định làm việc cùng một lúc.PageMethods không được định nghĩa trong ASPX Page

MyPage.aspx:

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

Và:

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

Mã đằng sau:

[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(); 
} 

Nhưng tại cal l để PageMethods.GetCompanyList() trong đoạn đầu tiên, Chrome báo cáo:

PageMethods không được định nghĩa

bất cứ ai có thể xem những gì đã thay đổi để ngăn chặn điều này làm việc?

Lưu ý: Tôi đã tìm thấy các câu hỏi tương tự nhưng tất cả dường như có liên quan đến mã này không hoạt động trong trang chính hoặc điều khiển người dùng, điều này không đúng ở đây.

Trả lời

18

EnablePageMethods thực sự chỉ tương tác với các phương pháp của một lớp con Pagepublic, static, và do như một WebMethod.

GetCompanyList có 2 trong số đó và cũng cần phải là static.

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

Và, tôi nghi ngờ những gì đang xảy ra là nó để lại PageMethods không xác định client-side nếu nó không tìm thấy bất kỳ phương pháp mà có tất cả 3.

+0

Bạn chắc chắn đúng về sự cần thiết của phương thức để được 'tĩnh', nhưng tôi không chắc chắn nó sẽ khiếu nại về các proxy JavaScript được' undefined' nếu không có phương pháp trang hợp lệ. –

+0

@KarlAnderson: Cố gắng xác nhận điều đó ngay bây giờ. –

+0

Có, điều này có vẻ là vấn đề. Tôi tìm thấy nơi nó đã được thay đổi từ tĩnh để không tĩnh một số thời gian trước đây khi chúng tôi refactored một phần của mã. Trong khi tôi không có một phiên bản tĩnh làm việc được nêu ra, bây giờ tôi nhận được một lỗi khác với một trong những tôi đã có. Cảm ơn! –

3

Bạn có thể gọi ASP.NET AJAX trang Phương pháp qua jQuery, như thế này:

$.ajax({ 
    type: "POST", 
    url: "PageName.aspx/MethodName", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     // Do something interesting here. 
    } 
}); 
+0

Rất tiếc, tôi đã dán mã sai trong đoạn mã thứ hai của mình. Có, 'EnablePageMethods' được đặt thành true. Tôi đã quen thuộc với '$ .ajax()' khi làm việc với MVC, nhưng vẫn sẽ rất hay khi làm cho mã này hoạt động mà không cần viết lại. –

+1

Có thể có vấn đề với phiên bản Chrome bạn đang thử và JavaScript được tạo bởi ASP.NET AJAX, jQuery sẽ cung cấp cho bạn trải nghiệm trình duyệt chéo tốt hơn nhiều, nhưng tôi hiểu mong muốn của bạn để làm cho nó hoạt động. Nó có hoạt động trong IE và/hoặc Firefox không? –

+0

Kết quả tương tự trên IE. Có vẻ như nó có thể đang hoạt động trên một phiên bản cũ hơn của Firefox. –

1

có thể bạn đang sử dụng Routing trong trang của bạn. sau đó phải được thiết lập con đường thực sau PageMethods gọi:

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

Một câu trả lời từ một giải pháp mà tôi nghĩ rằng nên được đại diện là nếu lỗi này xảy ra trên máy chủ của bạn nhưng không phải địa phương là để đặt các tập tin MyPage.aspx giữ chỗ trống và bây giờ nó cũng hoạt động trên máy chủ sản xuất.

Các vấn đề liên quan