次の方法で共有


ポストバックのためのクライアント側スクリプトの生成

フォームのポストバックは、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 ページ フレームワークによって追加されます。非表示のフォーム フィールドは、ポスト先のサーバー コントロールと、オプションで渡す引数を指定します。クライアント側スクリプト メソッドは、非表示のフィールドを設定するために使用され、フォームをサーバーに送信します。完全なサンプルについては、「クライアント側スクリプトを使用したポストバックのサンプル」を参照してください。

参照

クライアント側スクリプトを使用したポストバックのサンプル