0

我的基本结构:

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 尝试过类似的东西,但它有同样的问题。不过,基本字符串等其他变量也可以正常工作。

谢谢!

4

2 回答 2

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"];
   };
}
于 2017-03-09T00:32:06.860 回答
0

除了使用 ViewState 或 Session 对象之外,您还可以使用CommandEventArgsCommandEventArgs.CommandArgument通过绑定项将数据传递到页面

CommandArgument 可以包含程序员设置的任何字符串。CommandArgument 属性通过允许您为命令提供任何附加信息来补充 CommandName 属性。

当页面回发发生时,数据在绑定的事件处理程序中可用。只需确保方法签名包含正确的 EventArgs 类型,而不仅仅是默认值。

void CommandBtn_Click(Object sender, CommandEventArgs e)
于 2017-03-09T01:04:31.700 回答