我有一个多视图,里面有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中的值在回发中存在。虽然multiviews维护状态我做response.redirect将querystring传递给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值的代码,并在view1中将值写入inlabel1。当我执行response.redirect时,textbox1变为null,视图也变为null。
为什么viewstate中没有值?
谢谢!
答案 0 :(得分:4)
Asp.Net viewstate与其他系统(如Rails,PHP甚至Asp.Net MVC)中的正常get / post浏览器请求非常不同。
以下是您的方案中发生的事情:
我希望这会有所帮助。我认为可以安全地承认微软已经认识到他们在Asp.net中的viewstate模型的缺点。这使得实现性感的,现代的ajax应用程序变得非常困难,其中浏览器维护大部分应用程序状态并且只想从服务器发出对数据的小请求。我认为这是放弃Asp.Net MVC中viewstate模型的主要动机之一。