如何在回发之间保留全局变量(即结构变量)的值?

时间:2014-06-03 09:13:28

标签: c# asp.net ajax postback

我是新手,并且已经搜索了这个并没有太多运气:(

假设我已经全局定义了一个struct数组,并在数组中填充了Ajax ModalPopupExtender上的数据。然后我有一个 ddl_SelectedIndexChanged 事件,它执行回发并且似乎回收了我的数组。

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

(我正在创建一个网站)

提前致谢...

4 个答案:

答案 0 :(得分:2)

存储会话......

Session["ArrayName"] = ArrayVariable;

..将其恢复为数组类型

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

使用viewState

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

What is the difference between SessionState and ViewState?

如果仅用于您所在的页面,则应使用ViewState。如果您需要在整个网站上提供该选项,那么您的选项是会话缓存数据库。此外,请确保首先检查对象是否可用,如..

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

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

请参阅此文章了解using Cache in ASP.NET

答案 1 :(得分:1)

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

ViewState["arrayName"] = array;

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

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

有关ViewState的进一步记录,请查看here

答案 2 :(得分:0)

如果是页面级别,则转到viewstate

ViewState["arrayName"] = array;

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

Session["ArrayName"] = ArrayVariable;

答案 3 :(得分:0)

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

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

实际上,当您将值绑定到下拉列表时,下拉列表应将数据保存在viewstate中,除非您的逻辑在页面加载时清除。发布您的Page_Load事件可能会识别您的真实问题。

<强>更新 虽然再次阅读了你的问题但我可能错了,发布代码!