11

JS から静的サーバー側メソッドを呼び出したいので、自分のサイトで ScriptManager コントロールを使用することにしました。だから私はそのような構造を持つマスターページを持っています:

<%@ 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>

しかし、ページが読み込まれているときに、JS 例外があります - PageMethods は定義されていません。オブジェクトは暗黙的に作成されるので、JavaScriptで使用できると思いました。

4

4 に答える 4

24

PageMethods を使用するには、次の手順に従う必要があります。

  1. ScriptManagerを使用して設定する必要がありますEnablePageMethods。(あなたがした)。
  2. staticコード ビハインドでメソッドを作成し、[WebMethod]属性を使用します。
  3. C# で行う必要があるように、javascript でメソッドを呼び出しますが、フィル、sucessおよびerrorコールバックを実行するパラメーターが増えます。(あなたがした)。

これらの手順のいずれかを見逃していませんか?

編集:あなたがこれをしたことに気づきました:

            function getGiftFileUrl() {
            function OnSuccess...

関数内にコールバックがあります。次のようなコールバックが必要です。

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

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

そして、コードビハインドはおそらく次のようになります。

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

おまけ:static使えない方法なのでthis.Session["mySessionKey"]使えますHttpContext.Current.Session["mySessionKey"]

于 2013-05-27T16:10:22.110 に答える
3

コードビハインドで次のメソッドを作成します。

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

js スクリプトも次のようになります。

<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>
于 2013-05-27T16:24:00.793 に答える
2

PageMethod を使用するスクリプトの次に ScriptManager コンポーネントが配置されているため、PageMethod オブジェクトが定義されていない理由がわかりました。そのため、ページがレンダリングされてスクリプトが実行されると、現時点では PageMethod がありません。したがって、ページ上のすべてのスクリプトを使用する準備ができたら、ボタンのクリックまたはウィンドウの読み込みイベントで getGiftFileUrl() を呼び出す必要があります。

于 2013-05-28T08:18:02.520 に答える
-4
 <script type="text/javascript">
       function Generate()
       {              
           var result = PageMethods.GenerateOTP(your parameter, function (response)
           {
               alert(response);
           });
       }
</script>

100% 動作します。

于 2013-12-20T06:02:42.170 に答える