我是Web表单的新手...

1)我的默认Web表单是Default.aspx。它具有几个组合框和一个Button控件:所有ASP.Net Web控件。

2)在Page_load()中,创建一个C#对象“ ScoringInfo()”:

    受保护的void Page_Load(对象发送者,EventArgs e)
    {
        scoringInfo = new ScoringInfo();
        ...

3)ScoringInfo从数据库中读取一些信息到成员变量中,并使用成员变量来填充组合框:

    scoringInfo.GetOpenCrossByDate(dt,openCrossInfo);
    cbAvailableBowlers.Items.Clear();
    foreach(openCrossInfo中的OpenCrossInfoRec rec)
      字符串s =
        String.Format(
          “通道{0:00}:{1}”,
          rec.laneNo,rec.dateTime);
      cbAvailableBowlers.Items.Add(s);
      ...

4)这是成员变量:

  ...
  受保护的ScoringInfo scoringInfo;
  受保护的列表LeagueInfo = new List();
  受保护的列表openCrossInfo = new List();

5)当用户按下按钮时,我想显示第二个.aspx页面,该页面处理用户选择的特定组合框项目。这是我的“ OnClick”事件处理程序:

        受保护的void bTest_Click1(对象发送者,EventArgs e)
        {
          int idx = cbAvailableBowlers.SelectedIndex;
          Session [“ openCrossLaneUniqueId”] = openCrossInfo [idx] .laneUniqueId;
          ... //失败:
             //“ ARGUMENT OUT OF RANGE”例外;
             //“ idx”为0; openCrossInfo []列表为空...

它不起作用...因为执行bTest_Click1时成员变量,“ openCrossInfo []”和组合框属性SelectedIndex似乎不再有效!

问:如何/在何处保存同一会话中其他后续页面的UI状态???

先感谢您!

最佳答案

页面的成员变量(例如openCrossInfo)将不会在请求之间持久存在。每次有新请求进入时,都会再次创建.aspx的Page对象。因此,当bTest_Click事件触发时,它将使用Page对象的新副本。您的openCroseInfo数组没有值,因为即使您在先前的请求中进行了设置,页面对象还是刚刚创建的。

如果要保存状态,则必须使用其他内容,例如会话状态。

10-06 09:10