2008-10-21 106 views
22

變量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 

回答

40

正如其他人所指出的那樣,你可以將其存儲在Session或ViewState的。如果它是頁面特定的,我喜歡將它存儲在ViewState中而不是Session中,但我不知道是否一種方法通常優於另一種方法。

在VB中,你將一個項目存儲在象ViewState這樣的:

ViewState(key) = value 

和檢索它像:

value = ViewState(key) 
+0

哇。不要點擊鏈接。垃圾郵件城市。 – 2015-11-30 15:52:53

+0

哎呀。自2008年以來必須改變。刪除它。 – jerhinesmith 2015-11-30 23:06:39

4

儲存於會話。

Page.Session["MyPage_FileID"] = intFileID 

你必須爲用戶導航圍繞管理它的邏輯,但如果它是始終設置在從GET頁面加載(或你清楚,如果不是可以用GET),那麼你應該可以在會議後使用它提交PostBack。

+0

謝謝!我應該在哪裏設置價值?剛剛在頁面加載中初始化intFileID之後? – 2008-10-21 19:07:40

+0

在它具有最終值後將它添加到會話中。在你的情況下,在你設置請求參數的值之後。 – tvanfosson 2008-10-21 19:14:58

4

儲存於:

  • 會議
  • 的ViewState
  • 隱藏輸入
2

記住:

每個服務器代碼運行時,它的在一個嶄新的頁面類實例中。這是每個回發。

5

只是要總結一下上面所說的。

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

我個人更喜歡viewstate,因爲它可以在Web場環境中工作,Session不會,它不會將它存儲在等待用戶的服務器上,最多可以移除20分鐘,並且viewstate一般是地方用於頁面級數據。

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

+0

感謝有關Session的細節。這個應用程序可能永遠不會擴展到共享主機帳戶之外,但最好先了解一下。 – 2008-10-21 19:11:18

1

實際上,由於ASP.NET頁面回傳給自己 - 包括查詢字符串 - 您可以刪除If Not Page.IsPostBack條件。然後它會在每次回發時自行設置。

1

我個人會選擇將值存儲在控制狀態而不是視圖狀態,因爲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 
0

我將使用會話爲suggested by tvanfosson. 的ViewState和HiddenField可能是,如果你想保留大數據像在一個論壇的主題頁面的評論數據集太重..

1

Session["KeyName"] = your value;

  1. 類型強制類型檢索和存儲會話中的數據,如下所示:

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

ViewState["KEY"]= value;

  • 類型轉換的類型來檢索和數據從會話存儲像如下:
  • String str = (String)ViewState["KEY"];