マスターページ上で画面を遷移するプログラムを作成する
今回は、マスターページ内のフォームを遷移させるプログラムを作成します。
フォームを二つ作成し、入力用フォームにテキストボックスと送信ボタン、表示用フォームに入力した値を表示するためのラベルを配置して、入力用フォームの送信ボタンを押下すると、表示用フォームに遷移するという動作をします。
なお、マスターページやWebフォームを作成する手順は、こちらの記事を参照してください。
新しいプロジェクトの作成
新規にプロジェクトを作成します。
今回のサンプルプログラムは、プロジェクト名を「SmpWebForm2」として作成します。
Webフォームのマスターページの作成
Webフォームのマスターページを作成します。
マスターページ名は、「SmpSite.Master」とします。
Webフォームの作成と編集
ソリューションエクスプローラーから入力用Webフォームを「WebForm1」として作成し、以下のように編集します。
送信ボタンに、PostBackUrlプロパティを追加して、表示用フォームを指定します。
PostBackUrlプロパティの詳細は、以下のマイクロソフトの公式サイトを参照してください。
1 2 3 4 5 6 7 |
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/SmpSite.Master" CodeBehind="WebForm1.aspx.vb" Inherits="SmpWebForm2.WebForm1" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="送信" PostBackUrl="~/WebForm2.aspx" /> </asp:Content> |
同様に、表示用Webフォームを「WebForm2」として作成し、以下のように編集します。
1 2 3 4 5 6 |
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/SmpSite.Master" CodeBehind="WebForm2.aspx.vb" Inherits="SmpWebForm2.WebForm2" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <asp:Label ID="Label1" runat="server" Text="" Font-Size="36" ForeColor="Red"></asp:Label> </asp:Content> |
Request.FormメソッドでPOSTされた値を取得する
次に、入力用フォームのテキストボックスに入力された値を、表示用フォームで取得する処理を追加します。
以下のように「すべてのファイルを表示」アイコンをクリックして、「WebForm2.aspx.vb」を開きます。
表示用フォームがロードされたタイミングで入力された値を取得したいので、Page_Load()メソッドに処理を追加します。
Request.Form()メソッドを使うと、POSTされた値を取得することができます。
1 2 3 4 5 6 7 8 |
Public Class WebForm2 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim data As String = Request.Form("ctlSmpSite$ContentPlaceHolder1$TextBox1") Label1.Text = data End Sub End Class |
ここで注意しなければならないのは、マスターページの場合は「TextBox1」のようなコントロール名だけではなく、「マスターページID$プレイスフォルダー名$コントロール名」というように記述しなければならないということです。
マスターページIDのデフォルトは「ctl00」(00は連番)ですが、今回はマスターページクラスのコンストラクターにIDを設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Imports System.Runtime.CompilerServices Public Class SmpSite Inherits System.Web.UI.MasterPage Sub New() ID = "ctlSmpSite" End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load End Sub End Class |
プログラムを実行する
WebForm1.aspxを開いた状態で、Visual Studioの上部にある「IIS Express (Google Chrome)」をクリックして、プログラムを実行します。
テキストボックスに適当な文字列を入力して、送信ボタンを押下します。
画面が遷移して、テキストボックスに入力した値が表示されます。
アドレスが、WebForm1.aspxからWebForm2.aspxに変わっているのが分かります。