
前提・実現したいこと
Page1でButtonを押した時、HiddenFieldの値を設定してPage2へPOSTしたいのですが、Buttton1_Click()内でHiddenFieldに値を設定後、Server.Transfer()をすると値が設定できない上にURLがPage1のままなので都合が悪く(ユーザーにブックマークされたくない)、Response.Redirect()だとGETしか出来ないようなので使用を断念しています。
ButtonのPostBackUrlを使用するとHiddenFieldの値を設定するタイミングが分からず・・・。
実現できなければ設計は変えようと思っていますがダメ元で質問させていただきました。
該当のソースコード
一応Server.Transfer()を使ったものを載せます。
a.aspx
aspx
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="a.aspx.cs" Inherits="TransferTest.a" %> 2 3<!DOCTYPE html> 4 5<html xmlns="http://www.w3.org/1999/xhtml"> 6<head runat="server"> 7<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 8 <title></title> 9</head> 10<body> 11 <form id="form1" runat="server"> 12 <div> 13 <asp:HiddenField ID="HiddenField1" runat="server" /> 14 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 15 <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 16 </div> 17 </form> 18</body> 19</html>
a.aspx.cs
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.UI; 6using System.Web.UI.WebControls; 7 8namespace TransferTest 9{ 10 public partial class a : System.Web.UI.Page 11 { 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 15 } 16 17 protected void Button1_Click(object sender, EventArgs e) 18 { 19 HiddenField1.Value = "test"; 20 Server.Transfer("b.aspx"); 21 } 22 } 23}
b.aspx
aspx
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="b.aspx.cs" Inherits="TransferTest.b" %> 2 3<!DOCTYPE html> 4 5<html xmlns="http://www.w3.org/1999/xhtml"> 6<head runat="server"> 7<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 8 <title></title> 9</head> 10<body> 11 <form id="form1" runat="server"> 12 <div> 13 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 14 </div> 15 </form> 16</body> 17</html>
b.aspx.cs
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.UI; 6using System.Web.UI.WebControls; 7 8namespace TransferTest 9{ 10 public partial class b : System.Web.UI.Page 11 { 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 if (!IsPostBack) 15 { 16 Label1.Text = Request.Form["HiddenField1"].ToString(); 17 } 18 } 19 } 20}
補足情報(FW/ツールのバージョンなど)
OS:Windows7
.NET:4.0
IIS:10.0 Express
Visual Studio:2017 Community
SurferOnWww様のご回答を受けてのソース
a.aspx
aspx
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="a.aspx.cs" Inherits="TransferTest.a" %> 2 3<!DOCTYPE html> 4 5<html xmlns="http://www.w3.org/1999/xhtml"> 6<head runat="server"> 7<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 8 <title></title> 9</head> 10<body> 11 <form id="form1" runat="server"> 12 <div> 13 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 14 <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 15 </div> 16 </form> 17</body> 18</html>
a.aspx.cs
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.UI; 6using System.Web.UI.WebControls; 7 8namespace TransferTest 9{ 10 public partial class a : System.Web.UI.Page 11 { 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 15 } 16 17 protected void Button1_Click(object sender, EventArgs e) 18 { 19 Session["id"] = TextBox1.Text; 20 // SerferOnWww様のご回答ではここで Session["A.aspx.SpecialKeyName"] にするということでしょうか? 21 Response.Redirect("b.aspx"); 22 } 23 } 24}
b.aspx
aspx
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="b.aspx.cs" Inherits="TransferTest.b" %> 2 3<!DOCTYPE html> 4 5<html xmlns="http://www.w3.org/1999/xhtml"> 6<head runat="server"> 7<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 8 <title></title> 9</head> 10<body> 11 <form id="form1" runat="server"> 12 <div> 13 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 14 </div> 15 </form> 16</body> 17</html>
b.aspx.cs
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.UI; 6using System.Web.UI.WebControls; 7 8namespace TransferTest 9{ 10 public partial class b : System.Web.UI.Page 11 { 12 string strId; 13 14 protected void Page_Load(object sender, EventArgs e) 15 { 16 if (!IsPostBack) 17 { 18 strId = Session["id"].ToString(); // ←ここで別タブのSession["id"]が上書きされてしまうのでは、と考えました。 19 Session["id"].Remove(); 20 Label1.Text = strId; 21 } 22 } 23 } 24}

前のスレッドで Session のことをいろいろ学んだと思うのですが Session を使わないのは何故ですか?

回答1件
あなたの回答
tips
プレビュー