这可能是直截了当的。
我有一个DropDownList,一旦用户点击一个项目,我需要记住他们在DropdownList反弹之前点击的内容,所以我在外面做了一个变量。
但问题是变量无法看到。我设法让它工作的唯一一次是使用Public Shared variableoutside作为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
答案 0 :(得分:0)
字段仅在请求时生效。在回发时,您将获得Page类的新实例,因此需要新的实例字段。
共享(C#中的静态)字段的寿命更长(应用程序的整个生命周期),但它的价值在您网站的所有用户之间共享 - 可能不是您想要的。
解决方案是将该值存储在Session中。这是为了满足用户特定值的请求跨越存储而设计的。请注意,值存储为Object,因此您需要转换回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
您可以删除该类字段,因为不再使用该字段。
答案 1 :(得分:0)
我稍微改变了一下,然后抛弃了昏暗的变量 并使用Session(" lstTest")作为我的主要变量。它每次都记得。
你为我开了很多扇门,现在我可以用它来记住很多东西 DropDownList,CheckBoxes,Textboxes的设置。
我唯一想知道的是你允许多少个会话变量,因为我假设会话使用cookie,并且每个客户端和浏览器在开始覆盖之前允许最多允许使用cookie。至少在我当天使用PHP时就是如此。