マルチビューがあり、その中に2つのビューがあります。サンプルコードを貼っておきます。
<asp:MultiView ID="MultiView1" ActiveViewIndex="0" runat="server">
<asp:View ID="View1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="view1" />
<asp:Label ID="Label2" runat="server" ></asp:Label>
</asp:View>
<asp:View ID="View2" runat="server">
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="view2" />
</asp:View>
</asp:MultiView>
txtbox1 の値がポストバックにあるようにします。マルチビューは状態を維持しますが、response.redirect を実行してクエリ文字列を view2 に渡します。ポストバックを行うため、view2 の txtbox1(view1) の値を使用できません。ポストバック中に txtbox1 の値が null になります。次のコードを試しました
Public Partial Class viewstatetest
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not Page.IsPostBack()) Then
MultiView1.ActiveViewIndex = 0
Else
TypedPassword = TextBox1.Text
TextBox1.Attributes.Add("value", TypedPassword)
End If
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
MultiView1.ActiveViewIndex = 1
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
MultiView1.ActiveViewIndex = 0
Label1.Text = TextBox1.Text
Response.Redirect("viewstatetest.aspx")
End Sub
Public Property TypedPassword() As String
Get
If (ViewState("TypedPassword") IsNot Nothing) Then
Return CStr(ViewState("TypedPassword"))
End If
Return ""
End Get
Set(ByVal value As String)
ViewState("TypedPassword") = value
End Set
End Property
End Class
ページが初めて読み込まれるとき、view1 の txtbox1 に何かを入力してボタンをクリックすると、view2 が読み込まれ、txtbox1 の値を取得して値 inlabel1 を view1 に書き込むコードがあります。そして、response.redirect を実行すると、textbox1 が null になり、ビューも null になります。
ビューステートに価値がないのはなぜですか?
ありがとう!