代码之家  ›  专栏  ›  技术社区  ›  Kiel

铁路超高访问背后的变量代码

  •  0
  • Kiel  · 技术社区  · 7 年前

    这可能是直截了当的。

    我有一个下拉列表,一旦用户点击一个项目,我需要记住他们在下拉列表反弹之前点击了什么,所以我在外面做了一个变量。

    但问题是无法看到变量。我唯一一次设法让它工作是使用公共共享variableyoutside作为整数。但这使它可以用于每个页面,我只需要在这个页面上运行它。

    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 回复  |  直到 7 年前
        1
  •  0
  •   Hans Kesting    6 年前

    字段的有效期仅与请求的有效期相同。回发时,您会得到Page类的一个新实例,因此需要新的实例字段。

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

    解决方案是将该值存储在 Session

    编辑
    例如,您的代码

    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
    

    您可以删除该类字段,因为它不再使用。

        2
  •  0
  •   Kiel    7 年前

    不过我稍微改变了一下,把昏暗的变数扔到了外面

    你为我打开了很多门,现在我可以用它们来记住很多 下拉列表、复选框和文本框的设置。