2013-05-27 15 views
10

Chcę wywołać statyczne metody po stronie serwera z JS, więc zdecyduję się użyć kontroli ScriptManager na mojej stronie. więc mam stronę wzorcową, z taką strukturą:asp.net ScriptManager PageMethods jest niezdefiniowany

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="TopLevelMasterPage.Master.cs" 
    Inherits="Likedrive.MasterPages.TopLevelMasterPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:fb="http://ogp.me/ns/fb#"> 

<head runat="server"> 
    <title></title> 
     <script type="text/javascript"> 
      function getGiftFileUrl() { 
       function OnSuccess(response) { 
        alert(response); 
       } 
       function OnError(error) { 
        alert(error); 
       } 

       PageMethods.GetGiftFileUrl("hero", 1024, 768, OnSuccess, OnError); 
      } 

      getGiftFileUrl(); 

     </script> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManagerMain" 
      runat="server" 
      EnablePageMethods="true" 
      ScriptMode="Release" 
      LoadScriptsBeforeUI="true"> 
    </asp:ScriptManager> 
    <asp:ContentPlaceHolder ID="MainContent" runat="server"> 
    </asp:ContentPlaceHolder> 
    </form> 
</body> 
</html> 

Ale kiedy strona się ładuje, mam wyjątek JS - PageMethods jest niezdefiniowany. Przypuszczam, że obiekt zostanie utworzony niejawnie, więc mogę go używać w moim javascript.

Odpowiedz

2

mam sobie sprawę, dlaczego obiekt PageMethod został undefinded, ponieważ składnik ScriptManager umieszczone obok z skrypt, który używa programu PageMethod, więc gdy strona jest renderowana i wykonywany jest skrypt, w tej chwili nie ma strony PageMethod. Muszę więc wywołać metodę getGiftFileUrl() przy kliknięciu przycisku lub zdarzeniu ładowania okna, gdy wszystkie skrypty na stronie są gotowe do użycia.

+2

jakiejkolwiek końcowej próbki z rozwiązaniem? lub zaznaczoną @vitorcanova odpowiedź. – Kiquenet

21

Aby korzystać PageMethods trzeba wykonać następujące kroki:

  1. Trzeba użyć ScriptManager i ustawić EnablePageMethods. (Zrobiłeś).
  2. Utwórz metodę static w swoim kodzie i użyj atrybutu [WebMethod].
  3. Wywołanie metody w javascript, tak jak powinieneś zrobić w języku C#, ale masz więcej parametrów do wypełnienia, wywołania zwrotne sucess i error. (Zrobiłeś).

Czy przegapiłeś któryś z tych kroków?

Edit: sobie sprawę, że to zrobiłeś:

  function getGiftFileUrl() { 
      function OnSuccess... 

Masz Yours zwrotnych wewnątrz funkcji. Trzeba swoje Callbacki tak:

  function OnSuccess(response) { 
       alert(response); 
      } 
      function OnError(error) { 
       alert(error); 
      } 

PageMethods.GetGiftFileUrl("hero", 1024, 768, OnSuccess, OnError); 

I kod związany prawdopodobnie zakończy się w coś takiego:

[WebMethod] 
public static string GetGiftFileUrl(string name, int width, int height) 
{ 
    //... work 
    return "the url you expected"; 
} 

Bonus: Ponieważ jest to static sposób nie można używać this.Session["mySessionKey"], ale może zrobić HttpContext.Current.Session["mySessionKey"].

+0

Może WebMethod-PageMethods i JSON. – Kiquenet

+0

To powinna być zaakceptowana odpowiedź. – Fandango68

2

W swoim kodzie utworzyć tę metodę:

[WebMethod] 
public static void GetGiftFileUrl(string value1, int value2, int value3) 
{ 
    // Do Stuff 
} 

skrypt js powinien przypominać to zbyt:

<script type="text/javascript"> 
    function getGiftFileUrl() { 
     PageMethods.GetGiftFileUrl("hero", 1024, 768, OnSucceeded, OnFailed); 
    } 

    function OnSucceeded(response) { 
     alert(response); 
    } 
    function OnFailed(error) { 
     alert(error); 
    } 


    getGiftFileUrl(); 
</script> 
+0

Brakuje rzeczywistego wywołania getGiftFileUrl() z kontrolki ASP – Fandango68

-3
<script type="text/javascript"> 
     function Generate() 
     {    
      var result = PageMethods.GenerateOTP(your parameter, function (response) 
      { 
       alert(response); 
      }); 
     } 
</script> 

Czy 100% pracy.

Powiązane problemy