我是新手,并且已经搜索了这个并没有太多运气:(
假设我已经全局定义了一个struct数组,并在数组中填充了Ajax ModalPopupExtender上的数据。然后我有一个 ddl_SelectedIndexChanged 事件,它执行回发并且似乎回收了我的数组。
有没有办法触发 ddl_SelectedIndexChanged 事件来执行一些代码而不进行回发?或者是否有一种简单的方法可以使类型struct的数组保留它的值?
(我正在创建一个网站)
提前致谢...
答案 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事件可能会识别您的真实问题。
<强>更新强> 虽然再次阅读了你的问题但我可能错了,发布代码!