PostBackUrlで遷移元のページの値を取得する

前回、ASP.NET Web Formsでのページ遷移する方法を紹介しました。

今回は前回の最後に紹介したPostBackUrlでページ遷移したときに、遷移元のページの値を取得する方法について紹介します。

遷移元ページの設定

遷移元のページでは、遷移先のページに渡したい値をプロパティとして設定しておきます。

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Input.aspx.vb" Inherits="PostBackUrlSample.Input" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>遷移元ページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:TextBox ID="TxtInput" runat="server" />
            <asp:Button ID="BtnPost" runat="server" Text="送信" PostBackUrl="~/Result.aspx" />
        </form>
    </body>
</html>
Public ReadOnly Property TxtInputValue As String
    Get
        Return Me.TxtInput.Text
    End Get
End Property

上記ではaspx上に配置したTextBoxコントロールのTextプロパティをページのプロパティとして設定しています。

特に読み取り専用にする必要もないですが、遷移先のページで上書きしても意味ないので読み取り専用にしておくのが無難かと思います。

遷移先ページの設定

遷移先のページではPreviousPageTypeとして遷移元のページを登録しておきます。
(下記のaspxの3行目です。)

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Result.aspx.vb" Inherits="PostBackUrlSample.Result" %>

<%@ PreviousPageType VirtualPath="~/Input.aspx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>遷移先のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:Label ID="LblResult" runat="server" />
        </form>
    </body>
</html>
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Me.LblResult.Text = PreviousPage.TxtInputValue
End Sub

PreviousPageTypeを指定すると、該当する遷移元のページのクラスがPreviousPageとしてdesignerファイルに登録されます。

Public Shadows ReadOnly Property PreviousPage() As PostBackUrlSample.Input
    Get
        Return CType(MyBase.PreviousPage, PostBackUrlSample.Input)
    End Get
End Property

こうすることで遷移元で公開しているプロパティにアクセスすることができます。

実行してみると遷移元のページの値が遷移先のページに表示されることがわかると思います。

まとめ

遷移元では次のページに渡したい値をプロパティとして設定し、遷移先のページでは前のページをPreviousPageTypeとして登録して設定されたプロパティを通じて値を取得します。

上記のソースではInput.aspx以外からResult.aspxに遷移すると、Input.aspxのコードビハインドのオブジェクトが生成されていないためエラーになります。

Input.aspx以外のページからも遷移する場合は何らかの対応が必要になるので注意が必要です。

ちなみにViewStateを無効化しても上記のソースは動きますよ!

カテゴリー: .NET, ASP.NET, VB, Web Forms パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>