fc2ブログ

記事一覧

イベントの発生順序 | asp.net


今更ながらですが、今回は asp.net でイベントの発生順序を改めて覚え書きします。
Windows Forms のイベントとは以下の点で異なっています。
(1)基底クラスのイベント以外にもマスターページのイベントも加味しなければならない事
(2)ボタン押下時(ポストバック時)にも Init や Load 等のイベントが発生する事
(3)ページ描画前のイベント PreRender が存在する事
以上がイベントの発生順序として気を付けないといけない特徴でしょうか。

 aspnet_eventorder_01.png



前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2010 Professional 以降
・VB.NET
・.Net Framework 4.0 以降



1.確認方法

MasterPageを用意し、WebPageのマスターとして設定します。
次にBasePageを用意してWebPageに継承させます。全てのページにログを表示するようにコーディングします。
※ポストバック時にもログを出力する為にイベントでポストバックかどうかは判別していません。(ポストバックでない場合=If Not IsPostBack Then)

MasterPage.vb
Public Class MasterPage
Inherits System.Web.UI.MasterPage
Private Sub MasterPage_Init(sender As Object, e As EventArgs) Handles Me.Init
Debug.WriteLine("MasterPage.Init")
End Sub

Private Sub MasterPage_Load(sender As Object, e As EventArgs) Handles Me.Load
Debug.WriteLine("MasterPage.Load")
End Sub

Private Sub MasterPage_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
Debug.WriteLine("MasterPage.PreRender")
End Sub
End Class

BasePage.vb
Public Class BasePage
    Inherits System.Web.UI.Page
    Private Sub BasePage_PreInit(sender As Object, e As EventArgs) Handles Me.PreInit
        Debug.WriteLine("BasePage.PreInit")
    End Sub
    Private Sub BasePage_Init(sender As Object, e As EventArgs) Handles Me.Init
        Debug.WriteLine("BasePage.Init")
    End Sub
    Private Sub BasePage_InitComplete(sender As Object, e As EventArgs) Handles Me.InitComplete
        Debug.WriteLine("BasePage.InitComplete")
    End Sub
    Private Sub BasePage_PreLoad(sender As Object, e As EventArgs) Handles Me.PreLoad
        Debug.WriteLine("BasePage.PreLoad")
    End Sub
    Private Sub BasePage_Load(sender As Object, e As EventArgs) Handles Me.Load
        Debug.WriteLine("BasePage.Load")
    End Sub
    Private Sub BasePage_LoadComplete(sender As Object, e As EventArgs) Handles Me.LoadComplete
        Debug.WriteLine("BasePage.LoadComplete")
    End Sub
    Private Sub BasePage_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
        Debug.WriteLine("BasePage.PreRender")
    End Sub
    Private Sub BasePage_PreRenderComplete(sender As Object, e As EventArgs) Handles Me.PreRenderComplete
        Debug.WriteLine("BasePage.PreRenderComplete")
    End Sub
End Class

WebPage.vb
Public Class WebPage
    Inherits BasePage
    Private Sub WebPage_PreInit(sender As Object, e As EventArgs) Handles Me.PreInit
        Debug.WriteLine("WebPage.PreInit")
    End Sub
    Private Sub WebPage_Init(sender As Object, e As EventArgs) Handles Me.Init
        Debug.WriteLine("WebPage.Init")
    End Sub
    Private Sub WebPage_InitComplete(sender As Object, e As EventArgs) Handles Me.InitComplete
        Debug.WriteLine("WebPage.InitComplete")
    End Sub
    Private Sub WebPage_PreLoad(sender As Object, e As EventArgs) Handles Me.PreLoad
        Debug.WriteLine("WebPage.PreLoad")
    End Sub
    Protected Sub WebPage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Debug.WriteLine("WebPage.Load")
    End Sub
    Private Sub WebPage_LoadComplete(sender As Object, e As EventArgs) Handles Me.LoadComplete
        Debug.WriteLine("WebPage.LoadComplete")
    End Sub
    Private Sub WebPage_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
        Debug.WriteLine("WebPage.PreRender")
    End Sub
    Private Sub WebPage_PreRenderComplete(sender As Object, e As EventArgs) Handles Me.PreRenderComplete
        Debug.WriteLine("WebPage.PreRenderComplete")
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Debug.WriteLine("WebPage.Button.Click")
    End Sub
End Class



2.実行結果

ログを出力するようにコーディングしてありますので、Webサイトを実行するまたは、用意したサーバーコントロールのボタンを押下するだけで以下のようにイミディエイトウィンドウに表示されます。
基本的には Load 前までが MasterPage > BasePage > WebPage の順番で、Load からは BasePage > WebPage > MasterPage の順番になります。
ポストバックイベント(この場合はボタン押下時)後に処理を行いたい場合は、PreRenderイベントに記述したほうが良いことが分かります。

BasePage.PreInit
WebPage.PreInit
MasterPage.Init
BasePage.Init
WebPage.Init
BasePage.InitComplete
WebPage.InitComplete
BasePage.PreLoad
WebPage.PreLoad
BasePage.Load
WebPage.Load
MasterPage.Load
WebPage.Button.Click
BasePage.LoadComplete
WebPage.LoadComplete
BasePage.PreRender
WebPage.PreRender
MasterPage.PreRender
BasePage.PreRenderComplete
WebPage.PreRenderComplete







最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。



関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。