【问题标题】:How do you keep the value of global variables (namely a struct variable) between postbacks?你如何在回发之间保持全局变量(即结构变量)的值?
【发布时间】:2014-06-03 09:13:28
【问题描述】:

我是新手,已经搜索过这个,但运气不佳:(

假设我已经在全局范围内定义了一个结构数组,并用 Ajax ModalPopupExtender 上的数据填充了该数组。然后我有一个 ddl_SelectedIndexChanged 事件,它执行 postback 并且似乎回收了我的数组。

有没有办法触发 ddl_SelectedIndexChanged 事件来执行一些代码而不进行回发?或者有没有一种简单的方法可以让 struct 类型的数组保留它的值?

(顺便说一句,我正在创建一个网站)

提前谢谢...

【问题讨论】:

  • 您可以将数组保存在 session 对象中,或者如果是页面级别,则可以使用 ViewState - 假设这是 Webforms?
  • “全局定义”是什么意思?而且您应该正确标记它,因为您似乎在谈论 Ajax 调用,所以我猜您正在创建一个网站。 Show us some code: !important;
  • @christiandev - 是的,Webforms。我虽然将它保存为会话变量,但它会很快大量变量。我对 ViewState 不太熟悉,但会查一下。

标签: c# asp.net ajax postback


【解决方案1】:

在会话中存储...

Session["ArrayName"] = ArrayVariable;

..将其恢复为 Array 类型

var array = (ArrayType)Session["ArrayName"];

有视图状态

ViewState.Add("ArrayName", ArrayVariable);
var array= (ArrayType)ViewState["ArrayName"];

What is the difference between SessionState and ViewState?

如果这仅用于您所在的页面,那么您应该使用 ViewState。如果您需要它在整个站点上可用,那么您的选项是 SessionCacheDB。另外,请确保您首先检查对象是否可用,如..

if (Session["ArrayName"] != null)
   var array = (ArrayType)Session["ArrayName"];

..否则您将成为 Object Not Set Reference 错误的受害者。

using Cache in ASP.NET 见这篇文章。

【讨论】:

  • 这里需要查看状态。通常最好避免会话状态。请参阅我之前对此的回答。 programmers.stackexchange.com/questions/160947/…
  • @TimRogers,我同意,这就是为什么我还提到使用 ViewState
  • 非常感谢大家的帮助,我会尽快尝试其中的一些!
【解决方案2】:

您可以将数组存储在ViewState 中,如下所示:

ViewState["arrayName"] = array;

其中array 是您的阵列的名称。然后您可以使用ViewState["arrayName"] 轻松检索它。如果您的数组是一个字符串数组,您可以轻松地检索它:

string[] arr = ViewState["arrayName"] as string[];

有关ViewState 的更多文档,请查看here

【讨论】:

    【解决方案3】:

    如果是页面级别,则转到视图状态

    ViewState["arrayName"] = array;
    

    如果是到不同的页面,那么它是通过会话。

    Session["ArrayName"] = ArrayVariable;
    

    【讨论】:

    • 如果您也想复制和粘贴,我添加了更多内容? :)
    【解决方案4】:

    如前所述,已经使用 ViewState。在页面的类中创建一个属性并读取/写入该属性。显然将 List 更改为您的数组的类型。

    public List<string> SomeArray
    {
        get
        {
            if (ViewState["SomeArray"] != null)
            {
                return (List<string>)ViewState["SomeArray"];
            }
            return null;
        }
        set { ViewState["SomeArray"] = value; }
     }
    

    确实,当您将值绑定到下拉列表时,下拉列表应该将数据保存在视图状态本身中,除非您的逻辑在页面加载时清除。发布您的 Page_Load 事件可能会确定您的真正问题。

    更新 尽管再次阅读了您的问题,但我可能是错的,请发布代码!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      相关资源
      最近更新 更多