著者: Dflying Chen ( http://dflying.cnblogs.com/ )
これまでの一連の記事はすべて 1 つの Web サービスを直接呼び出していますが、実際のプロジェクト開発、特に既存のプロジェクトの変換では、ページ内のロジックを専用の Web サービスに抽出するのにかなりの作業が必要になることがよくあります。 Atlas ではこれを考慮し、サーバー側のパブリック メソッドに [WebMethod] 属性を追加して、クライアント側の JavaScript からの直接呼び出しを許可します。
クライアントが ASPX ページで定義されたメソッドを直接呼び出せるようにするには、メソッドをパブリックとして指定し、ASPX ファイルで定義されている次のサーバー側メソッドなどの [WebMethod] 属性を追加する必要があります:
<script runat="server">
[ウェブメソッド]
public int AddInt(int int1, int int2)
{
int1 + int2 を返します。
}
</script>
クライアント側では、Atlas が特別な名前空間 PageMethods に存在する AddInt JavaScript メソッドをマッシュアップします。これにより、PageMethods.AddInt() を通じて上記のメソッドを呼び出すことができます。
同時に、ASPX ページに WebMethod を定義することで、このメソッド内ですべてのページのサーバー側コントロールの値と ViewState にアクセスすることもでき、ページ全体のライフサイクルは以前と同じになります。従来の ASP.NET ページ PostBack (Page_Load など) 他のすべてのメソッドが呼び出され、ページへのより強力なアクセスが可能になります。ただし、Web メソッドが呼び出されるたびに、ページ上の ViewState とコントロールの値がサーバーに返され、ページのライフ サイクル全体のサーバー側の処理が行われるため、パフォーマンスの低下も伴います。 ASMX で定義されている Web メソッドは、純粋な Web メソッドを処理するよりもはるかに複雑です。したがって、ここでは可能な限り純粋な Web サービスを使用することをお勧めします。「Atlas サーバー側の実装では、Page メソッドの代わりに Web サービスを使用することをお勧めします」を参照してください。
例を見てみましょう。まず、ASPX で WebMethod を定義します。WebMethod が 2 つの数値の合計を見つけるだけでなく、ページ上のサーバー側 TextBox の値にもアクセスすることがわかります
。 ">
[ウェブメソッド]
パブリック文字列AddInt(int int1, int int2)
{
return (int1 + int2).ToString() + string.Format("rnサーバー テキスト ボックスのテキストは '{0}' です。", tbServer.Text);
}
</script>
次に、ページの ScriptManager があります。ここに参照を追加する必要はありません: <atlas:ScriptManager ID="scriptManager" runat="server" />
次に、加数を入力するために使用される 2 つの入力と、サーバー呼び出しをトリガーするために使用される入力があります:
<input id="value1" type="text" value="1" />
<input id="value2" type="text" value="2" />
<input id="btnAdd" type="button" value="追加!" onclick="return btnAdd_onclick()" />
サーバー側の TextBox もあります:
<asp:TextBox ID="tbServer" runat="server" Text="Server control"></asp:TextBox>
最後は、PageMethods の組み込み名前空間に注目してください。
function btnAdd_onclick() {
PageMethods.AddInt(
$('value1').value,
$('value2').value,
完了時
);
}
functionOnComplete(結果)
{
アラート(結果);
}
ブラウザで実行し、2 つの加数を入力して、サーバー側の TextBox に文字を入力し、[追加] をクリックすると、サーバー側の TextBox の値がアクセスされたことがわかります。
これは、Fiddler によって傍受されたネットワーク送信です。ViewState と TextBox の両方がサーバーに返されていることがわかります。
このサンプル プログラムのソース コードは、ここからダウンロードできます。