我创建了一个页面(代码隐藏在.vb后面)并创建了Public intFileID As Integer
在页面加载中我检查查询字符串并在可用时分配它或设置intFileID = 0.
Public intFileID As Integer = 0
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
If Not Request.QueryString("fileid") Is Nothing Then
intFileID = CInt(Request.QueryString("fileid"))
End If
If intFileID > 0 Then
GetFile(intFileID)
End If
End If
End Sub
Private Sub GetFile()
'uses intFileID to retrieve the specific record from database and set's the various textbox.text
End Sub
“提交”按钮有一个单击事件,它根据intFileID变量的值插入或更新记录。我需要能够在回发上坚持这一价值才能使它全部发挥作用。
该页面只是在SQL数据库中插入或更新记录。我没有使用gridview,formview,detailsview或任何其他rad类型的对象,它自己持有键值,我不想使用它们中的任何一个。
如何在不在HTML中创建可能被更改的内容的情况下,如何在intFileID中保留设置的值。
[编辑]更改了Page_Load以使用ViewState来保存intFileID值
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
If Not Request.QueryString("fileid") Is Nothing Then
intFileID = CInt(Request.QueryString("fileid"))
End If
If intFileID > 0 Then
GetFile(intFileID)
End If
ViewState("intFileID") = intFileID
Else
intFileID = ViewState("intFileID")
End If
End Sub
答案 0 :(得分:43)
正如其他人所指出的,您可以将其存储在Session或ViewState中。如果它是特定于页面的,我喜欢将它存储在ViewState中而不是Session中,但我不知道一种方法是否优先于另一种方法。
在VB中,您可以将项目存储在ViewState中,如:
ViewState(key) = value
并检索它:
value = ViewState(key)
答案 1 :(得分:5)
存储在:
答案 2 :(得分:5)
总结一下上面所说的内容。
您可以使用会话,视图状态或隐藏字段。
我个人更喜欢viewstate,因为它可以在Web场环境中运行,Session不会,它不会将它存储在等待用户的服务器上,最多可以删除20分钟,而且一般来说viewstate是用于页面级数据。
您可以使用隐藏字段,但用户可以更轻松地修改它。
答案 3 :(得分:4)
将其存储在会话中。
Page.Session["MyPage_FileID"] = intFileID
当用户导航时,您需要具有管理它的逻辑,但是如果它总是在页面从GET加载时设置(或者您清除它,如果在GET上不可用)那么您应该可以正常使用它稍后会在你提交PostBack的会话中。
答案 4 :(得分:2)
记住:
每次运行服务器代码时,它都位于页面类的全新实例中。这是针对每次回发的。
答案 5 :(得分:1)
实际上,由于ASP.NET页面回发到自身 - 包括查询字符串 - 您可以删除If Not Page.IsPostBack
条件。然后它会在每个回发上设置自己。
答案 6 :(得分:1)
我个人会选择将值存储在控制状态而不是viewstate,因为viewstate可以很容易地关闭。即使viewstate因任何原因关闭,ControlState也会保持不变。我已经列举了一个如何做到这一点的例子。
Private intFileId As Integer = 0
Public Property FileID() As Integer
Get
Return intFileId
End Get
Set(ByVal value As Integer)
intFileId = value
End Set
End Property
Protected Overrides Function SaveControlState() As Object
Dim objState(2) As Object
objState(0) = MyBase.SaveControlState()
objState(1) = Me.FileID
Return objState
End Function
Protected Overrides Sub LoadControlState(ByVal savedState As Object)
Dim objState() As Object
objState = savedState
MyBase.LoadControlState(objState(0))
Me.FileID = CInt(objState(1))
End Sub
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Me.Page.RegisterRequiresControlState(Me)
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
If Not String.IsNullOrEmpty(Request.QueryString("fileid")) Then
Me.FileID = CInt(Request.QueryString("fileid"))
End If
End If
Response.Write(Me.FileID.ToString())
End Sub
答案 7 :(得分:1)
Session["KeyName"] = your value;
- 键入类型以检索并存储会话中的数据,如下所示:
醇>
Datatable dt = (DataTable)(Session["KeyName"]);
或
ViewState["KEY"]= value;
- 键入类型以检索并存储会话中的数据,如下所示:
醇>
String str = (String)ViewState["KEY"];
答案 8 :(得分:0)
我将会话用作suggested by tvanfosson. 如果您想在论坛的主题页面中保留大数据(如数据集)以进行评论,则ViewState和HiddenField可能会过重。