ASP.NET では基本的にはポストバックで自ページへアクセスする機構で制御されますが、そのポストバック先を自身ではなく、ボタンコントロールの PostBackUrl プロパティにポストバック先を設定することで変更することができます。『ASP.NET でページ遷移 ( Server.Transfer / Response.Redirect )』ではポストバック先が自身のため無駄な通信が発生していると書きましたが、これを回避することができます。
スポンサーリンク
下記では、Web フォームにテキストボックスとボタンを1つ配置し、ボタンコントロールの PostBackUrl プロパティに遷移先のURLを設定しています。(遷移先のURLは、NextPage.aspx )
ASPX
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="NextPage.aspx" />
</div>
</form>
VB.NET
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
' 遷移元ページが、同一のASP.NET Webアプリケーション時の場合は
If Page.PreviousPage IsNot Nothing Then
' 遷移元のTextBoxオブジェクトを取得する
' TextBox1 は遷移元のコントロールID
Dim tb As TextBox
tb = CType(Page.PreviousPage.FindControl("TextBox1"), TextBox)
' Textを取り出す
'Dim text As String = tb.Text
End If
End Sub
C#
protected void Page_Load(object sender, EventArgs e)
{
// 遷移元ページが、同一のASP.NET Webアプリケーション時の場合は
if (Page.PreviousPage != null)
{
// 遷移元のTextBoxオブジェクトを取得する
// TextBox1 は遷移元のコントロールID
TextBox tb = (TextBox) Page.PreviousPage.FindControl("TextBox1");
if (tb != null)
{
// Textを取り出す
//string text = tb.Text;
}
}
}
注意事項
Page.PreviousPage で遷移元ページの情報が取得できるのは、Server.Transfer または PostBackUrl プロパティによる遷移の場合のみ可能です。Response.Redirect による画面遷移時には Page.PreviousPage で遷移元の情報を取得することはできません。
新規ウィンドウを開いてポストバックする
PostBackUrl プロパティを使用して、別ページにポストバックする方法を示しましたが、ここでは遷移ではなく ウィンドウをオープンしてそこにポストバックさせる方法を紹介します。
ASP.NET でどうこうと考えると難しくなりますが、HTML で考えてみるとわかりやすいです。通常の新規に画面を開く場合には、target 属性に”_blank” などを指定していますので、同じように form タグに target 属性を追加すればよいということになります。
ASPX
<form id="form1" runat="server" target="_blank">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="NextPage.aspx" />
</div>
</form>