子ウィンドウを表示するには、JavaScriptを併用する必要がある。具体的な実装手順について見ていこう。
●子ウィンドウの表示
まずは、先ほどのページ1(Default.aspx)にTextBoxコントロールとButtonコントロールを追加する。
コントロール | プロパティ | 値 | |
---|---|---|---|
(1)TextBox | (ID) | TextBox2 | |
Text | 2007/10/10 | ||
(2)Button | (ID) | Button2 | |
Text | カレンダ表示 | ||
次に、新しいWebフォーム「Calendar.aspx」を追加し、Calendar、TextBox、Buttonの各コントロールを1つずつ貼り付ける。
コントロール | プロパティ | 値 | |
---|---|---|---|
(1)Calendar | (ID) | Calendar1 | |
(2)TextBox | (ID) | TextBox1 | |
Text | (未入力) | ||
(3)Button | (ID) | Button1 | |
Text | OK | ||
また、カレンダ・ページ(Calendar.aspx)を[ソース]表示に変更し、<head>タグ内に下記の(太字の)コードを追記する。これは、カレンダ操作時にさらに別のウィンドウが開かれてしまうのを防ぐためのものだ。
<head runat="server">
<base target="_self">
<title>無題のページ</title>
</head>
次に、ページ1の[カレンダ表示]ボタン・クリック時にウィンドウを開くコードを追加する。追加場所はPage_Loadイベント・ハンドラである。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sbScript As New System.Text.StringBuilder()
sbScript.Append("ret = window.showModalDialog('Calendar.aspx','', 'dialogWidth:200px;dialogHeight:350px;');")
sbScript.Append("return false;")
Button2.Attributes("onclick") = sbScript.ToString()
End Sub
以上でデザインと実装は完了だ。
Webサイトを実行して、ページ1の[カレンダ表示]ボタンをクリックしてみよう。すると、次の画面のようにカレンダ・ウィンドウ(=子ウィンドウに表示されたカレンダ・ページ)が開くことを確認できる。
●子ウィンドウへのデータの引き継ぎ
このカレンダ・ウィンドウへ、ページ1からデータを引き継ぐ場合にはどうすればいいのだろうか? この場合にもJavaScriptを併用することになる。
まず、ページ1側のコードビハインド・ファイル(Default.aspx.vb)のコードを下記のように変更する。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sbScript As New System.Text.StringBuilder()
sbScript.Append("ret = window.showModalDialog('Calendar.aspx?DispDate=' + " & TextBox2.ClientID & ".value,'', 'dialogWidth:200px;dialogHeight:350px;');")
sbScript.Append(TextBox2.ClientID & ".value=ret;")
sbScript.Append("return false;")
Button2.Attributes("onclick") = sbScript.ToString()
End Sub
次に、カレンダ・ページのコードビハインド・ファイル(Calendar.aspx.vb)に、下記のコードを追加する。
Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
TextBox1.Text = Calendar1.SelectedDate.ToShortDateString()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Calendar1.SelectedDate = Date.Parse(Request.QueryString("DispDate"))
TextBox1.Text = Request.QueryString("DispDate")
Dim sbScript As New System.Text.StringBuilder()
sbScript.Append("window.returnValue = " & TextBox1.ClientID & ".value;")
sbScript.Append("window.close();")
Button1.Attributes("onclick") = sbScript.ToString()
End Sub
これを実行して[カレンダ表示]ボタンをクリックすると、カレンダ・ウィンドウが開き、ページ1で入力された日付がカレンダ上で選択されることが確認できる。また、[OK]ボタンをクリックすると、カレンダで選択されている日付がページ1に反映されることも確認できる。
*3 JavaScriptのコード追加方法には、上記で示した「Buttonコントロールのonclick属性に直接JavaScriptを指定する方法」以外にも、「<head>タグ内に<script>タグを追記する方法」がある。今回はJavaScriptのコード量が多くなかったため、このようにしたが、多い場合には<script>タグを使う方法も検討するとよい。
このように、子ウィンドウへデータを受け渡す場合にはJavaScriptの知識が必要となる。
特に、ASP.NETのコードはWebサーバ上で実行され、JavaScriptのコードはブラウザで実行されることに注意が必要だ。ASP.NETで子ウィンドウを表示させる場合は、Webサーバ側のVBコードとクライアント側のJavaScriptコードが混在し、分かりづらくなるためその仕組みをよく理解したうえで使うことをお勧めする。
今回はASP.NETで複数ページにわたるWebアプリの開発方法について見てきた。前回までの内容を併せて理解していただければ、Webアプリの画面については作成できるようになっているのではないだろうか?
次回は業務アプリで特に重要な入力チェックについて解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.