我是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数组没有值,因为即使您在先前的请求中进行了设置,页面对象还是刚刚创建的。
如果要保存状态,则必须使用其他内容,例如会话状态。