現在オフラインです。再接続するためにインターネットの接続を待っています

[HOWTO] Visual Basic .NET を使用して .aspx ページの特定のイベントを手動でポストバックする

概要
この資料では、コントロールの特定のイベントに応答して、生成される HTML コードをサーバーにポストバックするように .aspx ページを設定する方法について、手順を追って説明します。例として、この資料では Internet Explorer WebControls の TreeView コントロールを使用します。

AutoPostBack プロパティ

  • True : コントロールの AutoPostBack を True に設定すると、ポストバックを実行する必要のないイベントに応答して、サーバーへのポストバックが実行されることがあります。

    たとえば、TreeView コントロールで AutoPostBack を True に設定すると、onExpand イベント、onCollapse イベント、onCheck イベント、および onSelectedIndexChange イベントに応答して、ポストバックが発生します。
  • False : AutoPostBack を False に設定すると、特定のイベントに応答して、手動でポストバックを行います。

コードの作成

onSelectedIndexChange イベントに応答して手動でポストバックを行うには、次の手順を実行します。
  1. Web アプリケーションを作成し、.aspx ページに TreeView コントロールを配置します。
  2. .aspx ページで、TreeView コントロールの AutoPostBack プロパティを False に設定します。
  3. TreeView の Nodes プロパティで、Collection の省略記号ボタン (...) をクリックし、TreeView のノード コレクションにノードと子ノードを追加します。
  4. HTML ページの onload イベントを処理し、initTree 関数を呼び出します。このクライアント側の関数は、.aspx ページの Page_Load イベントで生成されます。

    .aspx ページの HTML ビューで、次のように body タグに onload イベント ハンドラを追加します。
    <body onload="initTree()">					
  5. 次の Page_Load 関数のコードを、作成した .aspx ファイルのコード ビハインド クラスの Page_Load 関数に追加します。
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load    Dim strTreeName As String = "TreeView1"    Dim strRef As String = Page.GetPostBackEventReference(TreeView1)    Dim strScript As String = "<script language=""JavaScript""> " & vbCrLf & _        "<!-- " & vbCrLf & _        "	function initTree() { " & vbCrLf & _        "		" & strTreeName & ".onSelectedIndexChange = function() { " & vbCrLf & _        "			if (event.oldTreeNodeIndex != event.newTreeNodeIndex) " & vbCrLf & _        "				this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex & ',' & event.newTreeNodeIndex); " & vbCrLf & _        "			window.setTimeout('" & strRef.Replace("'", "\'") & "', 0, 'JavaScript'); " & vbCrLf & _        "		} " & vbCrLf & _        "	} " & vbCrLf & _        "// --> " & vbCrLf & _        "</script>"    Page.RegisterClientScriptBlock("InitTree", strScript)End Sub					

コードの説明

コード作成の経緯

この資料で前述したコードは、次のプロセスを使用して作成されました。
  • .aspx ページを作成し、TreeView コントロールの AutoPostBack を True に設定しました。
  • Internet Explorer ブラウザで .aspx ページを表示し、ソースを .html ファイルに保存しました。
  • TreeView コントロールの AutoPostBack を False に設定し、再びブラウザでページを表示しました。
  • 2 つのファイルを比較し、相違点をメモし、この資料で前述したコードの生成に役立てました。

コードの詳細

  • この資料の Page_Load 関数のコードにより、ブラウザで次のコードが表示されます。
    <script language="JavaScript"><!--     function initTree() {         TreeView1.onSelectedIndexChange = function() {             if (event.oldTreeNodeIndex != event.newTreeNodeIndex)                 this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex & ',' & event.newTreeNodeIndex);             window.setTimeout('__doPostBack(\'TreeView1\',\'\')', 0, 'JavaScript');         }     } // --></script>						
    ブラウザに HTML ページがロードされると、initTree 関数が実行されます。initTree 関数により、TreeView1 の onSelectedIndexChange イベントが上書きされ、onSelectedIndexChange イベントがページのイベント キューに追加され、サーバーにポストバックされます。
  • 新しい onSelectedIndexChange 関数の 1 行目、
    if (event.oldTreeNodeIndex != event.newTreeNodeIndex)     this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex);						
    は、保存されている .html ファイルで定義されている関数の元の定義から直接取得されます。
  • TreeView の AutoPostBack を True に設定すると、HTML で次のコードが表示されます。
    window.setTimeout('__doPostBack(\'TreeView1\',\'\')', 0, 'JavaScript');						
    ポストバックのメカニズム (この例では __doPostBack) は将来変更される可能性があるため、次のコードを使用してサーバー上に関数を生成します。
    string strRef = Page.GetPostBackEventReference(TreeView1);					
    Page_Load でポストバックのイベント参照が使用され、クライアントで PostBack イベントが生成されます。
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
305140 ASP.NET ロードマップ

319441 [HOWTO] Visual Basic .NET を使用して、ノードを TreeView WebBrowser コントロールに動的に追加する方法
プロパティ

文書番号:328923 - 最終更新日: 10/11/2006 05:28:56 - リビジョン: 3.2

Microsoft ASP.NET 1.0, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft ASP.NET 1.1, Microsoft Visual Basic .NET 2003 Standard Edition

  • kbhowtomaster kbservercontrols KB328923
フィードバック
>