无法访问背后的变量代码
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 时是这样。
这可能是直截了当的。
我有一个 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 时是这样。