无法访问的变量代码

时间:2017-07-13 08:16:28

标签: asp.net vb.net variables code-behind protected

这可能是直截了当的。

我有一个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

2 个答案:

答案 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时就是如此。