フォームのポストバックは、2 つの HTML フォーム要素 (ボタンおよびイメージ ボタン) だけで発生します。カスタム コントロールがポストバックを開始しない HTML 要素 (テキスト ボックスやリンク ボタンなど) を表示するにもかかわらず、そのコントロールにポストバックを開始させる必要がある場合は、クライアント側スクリプト (JScript、JavaScript) を使用するイベント アーキテクチャを通じて ASP.NET にこの動作をプログラムできます。
このようなポストバック機構を有効にするには、コントロール開発者がコントロールに多少の変更を加える必要があります。ポストバックを開始するためにコントロールの Render メソッドに追加する必要があるコード (太字の部分) を含むコードを次に示します。
protected override void Render(HtmlTextWriter output) {
output.Write("<a id=\"" + this.UniqueID + "\" href=\"javascript:" + Page.GetPostBackEventReference(this) +"\">");
output.Write(" " + this.UniqueID + "</a>");
}
[Visual Basic]
Protected Overrides Sub Render(output As HtmlTextWriter)
output.Write("<a id=""" & Me.UniqueID & _
""" href=""javascript:" & _ Page.GetPostBackEventReference(Me) & """>")
output.Write(" " & Me.UniqueID & "</a>")
End Sub
GetPostBackEventReference メソッドは、ポストバックを開始するクライアント側スクリプトを挿入し、ポストバック イベントを開始するコントロールへの参照を提供します。
GetPostBackEventReference メソッドの動作を理解するには、次のセクション「クライアント側スクリプトを使用したポストバックのサンプル」で示すコードをコンパイルし、使用するブラウザでコードを含む .aspx ページを要求してください。ブラウザの View Source コマンドを使用して、表示されたページのソースを表示すると、次のような HTML およびスクリプトが表示されます。フォームの名前と ID 属性の実際の値は異なるため、隠し変数の値属性も異なります。
<html>
<body>
<form name="ctrl2" method="POST" action="MyLinkButton.aspx" id="ctrl2">
<input type="hidden" name="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" value="dDwtMjI1NTgwNDE2Ozs+eIZ+AfRvoCj1nWimbh+zPv/rKNg=" />
Here is the custom link button.<br>
<a id ="Link" href="javascript:__doPostBack('Link','')"> Link</a>
<br><br>
<input name="TextBox" type="text" value="Click the link" id="TextBox" style="background-color:Cyan;width:200px;" />
<br>
<script language="javascript"><!-- function __doPostBack(eventTarget, eventArgument) { var theform = document.ctrl2 theform.__EVENTTARGET.value = eventTarget theform.__EVENTARGUMENT.value = eventArgument theform.submit() }// --></script>
</form>
</body>
</html>
この例で太字で示した要素 (2 つの非表示フィールドとクライアント側スクリプト メソッド) は、ASP.NET ページ フレームワークによって追加されます。非表示のフォーム フィールドは、ポスト先のサーバー コントロールと、オプションで渡す引数を指定します。クライアント側スクリプト メソッドは、非表示のフィールドを設定するために使用され、フォームをサーバーに送信します。完全なサンプルについては、「クライアント側スクリプトを使用したポストバックのサンプル」を参照してください。