【问题标题】:Variables Code Behind Cant Access无法访问背后的变量代码
【发布时间】:2017-12-17 21:51:29
【问题描述】:

这可能是直截了当的。

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

但问题是变量看不到。我设法让它工作的唯一一次是使用 Public Shared variableoutside 作为整数。但这使得它可用于我只在我正在运行的这个页面上需要它的每个页面。

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

【问题讨论】:

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


    【解决方案1】:

    字段仅在请求期间存在。在回发时,您会获得 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
    

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

    【讨论】:

    • 感谢您的回复,您能否详细说明我将如何在会话中做到这一点,干净的版本。
    【解决方案2】:

    哇,这真的很酷。喜欢,谢谢...

    我稍微改变了它,并在外面放弃了 Dim 变量 并使用 Session("lstTest") 作为我的主要变量。它每次都会记住。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2020-01-17
      相关资源
      最近更新 更多