如何坚持回发

变量i页面加载创造了单页(背后的.vb代码)和创建公共intFileID作为整数如何坚持回发

我检查查询字符串,如果可用或设置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类型的对象,它自己坚持键值,我不想使用它们中的任何一个。

如何在intFileID中持续设置值而不在HTML中创建可能会更改的内容。

[编辑]更改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

回答:

正如其他人所指出的那样,你可以将其存储在Session或ViewState的。如果它是页面特定的,我喜欢将它存储在ViewState中而不是Session中,但我不知道是否一种方法通常优于另一种方法。

在VB中,你将一个项目存储在象ViewState这样的:

ViewState(key) = value 

和检索它像:

value = ViewState(key) 

回答:

储存于会话。

Page.Session["MyPage_FileID"] = intFileID 

你必须为用户导航围绕管理它的逻辑,但如果它是始终设置在从GET页面加载(或你清楚,如果不是可以用GET),那么你应该可以在会议后使用它提交PostBack。

回答:

储存于:

  • 会议
  • 的ViewState
  • 隐藏输入

回答:

记住:

每个服务器代码运行时,它的在一个崭新的页面类实例中。这是每个回发。

回答:

只是要总结一下上面所说的。

您可以使用Session,Viewstate或隐藏字段。

我个人更喜欢viewstate,因为它可以在Web场环境中工作,Session不会,它不会将它存储在等待用户的服务器上,最多可以移除20分钟,并且viewstate一般是地方用于页面级数据。

您可以使用隐藏字段,但用户可以更容易地修改它。

回答:

实际上,由于ASP.NET页面回传给自己 - 包括查询字符串 - 您可以删除If Not Page.IsPostBack条件。然后它会在每次回发时自行设置。

回答:

我个人会选择将值存储在控制状态而不是视图状态,因为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

回答:

我将使用会话为suggested by tvanfosson. 的ViewState和HiddenField可能是,如果你想保留大数据像在一个论坛的主题页面的评论数据集太重..

回答:

Session["KeyName"] = your value;

  1. 类型强制类型检索和存储会话中的数据,如下所示:

Datatable dt = (DataTable)(Session["KeyName"]);

ViewState["KEY"]= value;

  • 类型转换的类型来检索和数据从会话存储像如下:
  • String str = (String)ViewState["KEY"];

    以上是 如何坚持回发 的全部内容, 来源链接: utcz.com/qa/263893.html

    回到顶部