我的基本结构:
public partial class _Search : BasePage
{
private string[] catPath = new string[3]; //set string array
...more code...
protected void Categories_DataBound(object sender, EventArgs e)
{
for (int i = 3; i > 0; i--)
{
catPath[i] = somestring; //fills array
}
}
...more code...
protected void Cat1_Click(object sender, EventArgs e)
{
MessageBox.Show(catPath[0]); //uses array
}
}
我在catPath
事件中使用我的Click
数组时遇到问题,它是空的,好像从未在DataBound
方法中设置一样。我知道它在Click
事件之前设置,因为我在MessageBox
方法中使用了DataBound
来显示数组中的值,所以我做错了什么?
我尝试过与List类似的东西,但它遇到了同样的问题。其他变量如基本字符串工作正常。
谢谢!
答案 0 :(得分:3)
ASP.NET是一种Web技术,Web是无状态的,因此您必须以另一种方式维护状态。您必须在ViewState或Session中维护它。所以,ViewState.add("CathPath", catPath)
或Session.add("CatPath", catPath)
。当您在该页面上时,将保留ViewState
,当您在应用程序中拥有活动会话时,将保留Session
状态。然后你就可以像var catPath = ViewState["CatPath"];
您可以将其包装在属性中,以便以与普通类相似的方式访问它。
public string[] CatPath {
get {
return ViewState["CatPath"];
};
}
答案 1 :(得分:0)
除了使用ViewState或Session对象之外,您还可以使用CommandEventArgs和CommandEventArgs.CommandArgument
通过绑定项将数据传递到页面CommandArgument可以包含程序员设置的任何字符串。 CommandArgument属性通过允许您提供命令的任何其他信息来补充CommandName属性。
发生页面回发时,数据在绑定事件处理程序中可用。只需确保方法签名包含正确的EventArgs类型,而不仅仅是默认值。
void CommandBtn_Click(Object sender, CommandEventArgs e)