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で使用できると想定しました。
ScriptMethodコンポーネントがPageMethodを使用するスクリプトの隣に配置されているため、PageMethodオブジェクトが未定義である理由を理解しました。そのため、ページ上のすべてのスクリプトを使用する準備ができたら、ボタンクリックまたはウィンドウロードイベントでgetGiftFileUrl()を呼び出す必要があります。
PageMethodsを使用するには、次の手順に従う必要があります。
ScriptManager
を使用し、EnablePageMethods
を設定する必要があります。 (やった)。static
メソッドを作成し、[WebMethod]
属性を使用します。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"]
は使用できます。
分離コードでこのメソッドを作成します。
[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>