无法访问背后的变量代码

Variables Code Behind Cant Access

这可能是直截了当的。

我有一个 DropDownList,一旦用户点击了一个项目,我需要记住他们在 DropdownList 反弹之前点击了什么,所以我在外部创建了一个变量。

但问题是变量看不到。我唯一一次让它工作是使用 Public Shared variableoutside as Integer。但这使得它可用于每个页面我只需要它在这个页面上我是 运行.

Dim variableoutside as Integer

Protected Sub lstTest_DataBound(sender As Object, e As EventArgs) Handles lstTest.DataBound
    if variableoutside > 0 Then lstTest.SelectedIndex = variableoutside 
End Sub

Protected Sub lstTest_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstTest.SelectedIndexChanged
    variableoutside = lstTest.SelectedIndex
    lstTest.DataValueField = "ID"
    lstTest.DataTextField = "testvalue"
    lstTest.DataSource = List_TestA.List_Test()
    lstTest.DataBind()
End Sub

字段仅在请求期间有效。在回发时,您将获得页面的新实例 class,因此新的实例字段。

共享(C# 中的静态)字段确实存在时间更长(应用程序的整个生命周期),但它的值在您网站的所有用户之间共享 - 可能不是您想要的。

一个解决方案是将该值存储在 Session 中。这是为用户特定值的跨请求存储而设计的。请注意,这些值存储为对象,因此您需要转换回 Int。

编辑
例如,您的代码

Protected Sub lstTest_DataBound(sender As Object, e As EventArgs) Handles lstTest.DataBound
    if variableoutside > 0 Then lstTest.SelectedIndex = variableoutside 
End Sub

可能是

Protected Sub lstTest_DataBound(sender As Object, e As EventArgs) Handles lstTest.DataBound
    Dim variableoutside as Integer
    variableoutside = Session("ListIndex") ' probably cast this to Integer
    if variableoutside > 0 Then lstTest.SelectedIndex = variableoutside 
End Sub

(请注意,我猜测的是正确的 VB 语法,因此您可能需要对其进行调整)

当然还有另一种方法,而不是:

variableoutside = lstTest.SelectedIndex

使用它来设置那个会话值:

Session("ListIndex") = lstTest.SelectedIndex

您可以删除那个 class 字段,因为它不再被使用。

哇,那真是太酷了。喜欢,谢谢...

虽然我稍微改变了它并放弃了外部的 Dim 变量 并使用 Session("lstTest") 作为我的主要变量。每次都记得。

你为我打开了很多门,现在我可以用它们来记住很多 DropDownList、CheckBoxes、Textboxes 的设置。

我唯一想知道的是您允许使用多少个会话变量,因为我假设会话正在使用 cookie,并且 cookie 在开始覆盖之前每个客户端和浏览器都有一个最大允许值。至少我以前使用 PHP 时是这样。