Подтвердить что ты не робот

Как сохранить переменную на обратной стороне

Я создал одну страницу (с кодом позади .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 the various textbox.text
End Sub

Для кнопки "Отправить" есть событие click, которое вставляет или обновляет запись, основанную на значении переменной intFileID. Мне нужно уметь сохранять эту ценность при обратной передаче, чтобы все это работало.

Страница просто вставляет или обновляет запись в базе данных SQL. Я не использую gridview, formview, detailview или любой другой объект типа Rad, который сохраняет ключевое значение сам по себе, и я не хочу использовать их.

Как я могу сохранить значение, установленное в intFileID, не создавая что-то в HTML, которое можно было бы изменить.

[EDIT] Изменен 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
4b9b3361

Ответ 1

Как указывали другие, вы можете сохранить его в сеансе или в ViewState. Если это определенная страница, мне нравится хранить ее в ViewState, в отличие от сеанса, но я не знаю, является ли один метод предпочтительнее другого.

В VB вы сохраните элемент в ViewState, например:

ViewState(key) = value

И получить его как:

value = ViewState(key)

Ответ 2

Просто, чтобы суммировать сказанное выше.

Вы можете использовать Session, Viewstate или скрытое поле.

Я лично предпочитаю viewstate, поскольку он будет работать в средах веб-ферм, Session не работает, он не хранит его на сервере, ожидающем пользователя, на удаление до 20 минут, и в общем случае viewstate это место для для данных уровня страницы.

Вы можете использовать скрытое поле, но тогда пользователь может более легко его изменить.

Ответ 3

Сохраните его в сеансе.

Page.Session["MyPage_FileID"] = intFileID

Вам нужно будет иметь логику, управляющую ею, когда пользователь перемещается, но если она всегда задается, когда страница загружается из GET (или вы ее очищаете, если она недоступна в GET), вы должны быть в порядке, используя это позже из Сессии на вашем отправке PostBack.

Ответ 4

Сохранить в:

  • Session
  • ViewState
  • Скрытый ввод

Ответ 5

Помните:

Каждый раз, когда запускается ваш код сервера, он отображается в новом экземпляре вашего класса. Это для каждой обратной передачи.

Ответ 6

На самом деле, так как страница ASP.NET обращается к себе - включая строку запроса - вы можете просто удалить условие If Not Page.IsPostBack. Тогда он установил бы себя на каждой обратной передаче.

Ответ 7

Я лично решил сохранить значение в состоянии управления вместо viewstate, так как viewstate можно легко отключить. ControlState будет сохраняться, даже если viewstate выключен по какой-либо причине. Я привел пример о том, как это можно сделать.

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

Ответ 8

Session["KeyName"] = your value;

  • Введите тип для получения и сохранения данных из сеанса, как показано ниже:

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

или

ViewState["KEY"]= value;

  1. Введите тип для получения и сохранения данных из сеанса, как показано ниже:

String str = (String)ViewState["KEY"];

Ответ 9

Я буду использовать Session как предложенный tvanfosson. ViewState и HiddenField могут быть слишком тяжелыми, если вы хотите хранить большие данные, такие как набор данных для комментариев, на страницах темы форума.