У меня есть многопользовательская версия и есть 2 вида внутри. Я собираюсь вставить пример кода.Передача значений с использованием viewstate через postback в multiview
<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. Поскольку я делаю postback, я не могу использовать значение в txtbox1 (в представлении1), в view2. Значение в txtbox1 становится нулевым во время обратной передачи. Я попытался следующий код
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
При загрузке страницы в первый раз, я что-то типа в txtbox1 в view1 и нажмите на кнопку, view2 загружен и у меня есть код, который получает значение txtbox1 и записывает значение inlabel1 в view1. И когда я делаю response.redirect, textbox1 становится null, а view также становится нулевым.
Почему нет значения в viewstate?
Спасибо!
На самом деле, я бы сказал, что viewstate было «заброшено», потому что MVC не имеет серверных элементов управления, что и использует viewstate в первую очередь. –
100% согласен. Курица и яйца. – randomfactor
Buck-AWK! Хороший анализ того, что происходит в противном случае, кстати. +1 –