2009-08-24 30 views
7

Tôi có một cuộc gọi rất đơn giản tới một PageMethod. Khi tôi duyệt qua PageMethod trong tệp .cs của tôi, giá trị trông như mong đợi. Tuy nhiên, ở phía khách hàng tôi nhận được một kết quả không xác định. Bất kỳ ý tưởng? Điều này nên được đơn giản khủng khiếp.PageMethods trả về kết quả không xác định?

Đây là js của tôi: (EnablePageMethods="true" trong trang ASPX của tôi)

function test() { 
    alert(PageMethods.MyMethod("Joe Blow")); 
} 

Và đây là của tôi C#:

public partial class test : System.Web.UI.Page 
{ 
    [WebMethod] 
    public static string MyMethod(string name) 
    { 
     return "Hello " + name; 
    } 
} 
+0

Tôi mang nó thuộc tính EnablePageMethods là trên một điều khiển ScriptManager trong trang của bạn? –

+0

Có, cho câu hỏi đầu tiên của bạn. – Clay

+0

Không, với câu hỏi thứ hai của bạn, tôi đã đọc nó trước đó ... đã không tìm thấy câu trả lời cho điều này ở đây cho đến nay. Cảm ơn. – Clay

Trả lời

1

Check-out screencast sau. Nó giải thích làm thế nào để gọi PageMethods sử dụng JQuery:

http://www.highoncoding.com/Articles/430_Calling_Page_Methods_Using_JQuery_and_Returning_JSON_Result.aspx

+0

Cảm ơn bạn, điều này đã hiệu quả. Tôi muốn hiểu lý do tại sao sử dụng jQuery để thực hiện cuộc gọi JSON đã hoạt động nhưng "cách của Microsoft" thì không. Cảm ơn bạn đã dành thời gian! – Clay

+0

Tôi sẽ thử với thư viện của Microsoft và cho bạn biết. Cảm ơn! – azamsharp

+0

Âm thanh tuyệt vời, tôi hy vọng bạn có may mắn hơn tôi! :) – Clay

3

Bạn đã vượt qua trong một hàm callback mà có thể được thực hiện trên thành công/ngoại lệ. Vì vậy, trong trường hợp này, nó sẽ giống như thế này

PageMethods.MyMethod("Joe Blow", onSuccess, onError); 

function onError(desc) { 
} 

function onSuccess(result) { 
} 

Tôi sẽ kiểm tra tài liệu để sử dụng chính xác.

+0

Tôi đã thực hiện việc này và có vẻ như không hữu ích. – Clay

7

Đây là câu trả lời về cách gọi PageMethods bằng MS Ajax. Trước tiên hãy chắc chắn rằng bạn đã tải xuống thư viện Ajax mới nhất từ ​​trang web MS.

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

    <input type="button" value="Greeting" onclick="greetings()" /> 

<script language="javascript" type="text/javascript"> 

    function greetings() { 

     PageMethods.GreetingFromPage(function(response) { 

      alert(response); 

     }); 

    } 


</script> 

    [WebMethod] 
     public static string GreetingFromPage() 
     { 
      return "greeting from page"; 
     } 

Đó là khá nhiều!

+0

Cảm ơn, cú pháp ở đây hơi khác so với những gì tôi đang sử dụng, tôi sẽ cung cấp cho một shot. – Clay

+0

+1 Điều này thực sự hiệu quả. – Steffen

+0

nếu chức năng có thông số thì sao? – bebosh

0

This là một bài viết tuyệt vời và cụ thể về chủ đề này.

Đối với tôi, mã sau đang hoạt động.

Tôi có một trang xử lý tệp excel không đồng bộ; trong khi chế biến, hàm EsperarFinDelCargue() các cuộc thăm dò một PageMethod gọi CargueFinalizo() mỗi giây để xem nếu chế biến đã kết thúc. Khi xử lý xong, một chuyển hướng diễn ra.

OnCallFinalizoComplete là hàm gọi lại cho lời gọi PageMethod, vì vậy bạn cần sử dụng đối tượng kết quả.

<script type="text/javascript">  

    function EsperarFinDelCargue() 
    {   
     PageMethods.CargueFinalizo(OnCallFinalizoComplete);    
     if($('#<%=this.hidCargueFinalizado.ClientID %>').val() == "SI") 
     { 
      document.location = "CargarPanelHCP.aspx"; 
     } 
     else 
     { 
      var t=setTimeout("EsperarFinDelCargue()",1000);     
     } 
    } 

    function OnCallFinalizoComplete(result,contexto,CargueFinalizo) 
    {    
     $('#<%=this.hidCargueFinalizado.ClientID %>').val(result);    
    } 
</script> 

Và đây là mã PageMethod trong aspx:

[System.Web.Services.WebMethod] 
public static string CargueFinalizo() 
{ 
    //Whatever you need 
    return HttpContext.Current.Session["ResultadoCarguePanel"] != null ? "SI" : "NO"; 
} 
0
Try This it will work fine 

    <script type="text/javascript"> 
     function Generate() 
     {    
      var result = PageMethods.GenerateOTP(your parameter, function (response) 
      { 
       alert(response); 
      }); 
     } 
</script> 
Các vấn đề liên quan