我是网络表单的新手。
1) 我的默认网络表单是 Default.aspx。它有几个组合框和一个按钮控件:所有 ASP.Net Web 控件。
2) 在 Page_load() 中,我创建了一个 C# 对象“ScoringInfo ()”:
protected void Page_Load(object sender, EventArgs e)
{
scoringInfo = new ScoringInfo();
...
3) ScoringInfo从数据库中读取一些信息到成员变量中,并使用成员变量填充组合框:
scoringInfo.GetOpenCrossByDate(dt, openCrossInfo);
cbAvailableBowlers.Items.Clear ();
foreach (OpenCrossInfoRec rec in openCrossInfo)
string s =
String.Format(
"Lane {0:00}: {1}",
rec.laneNo, rec.dateTime);
cbAvailableBowlers.Items.Add(s);
...
4) 下面是成员变量:
... protected ScoringInfo scoringInfo; protected List leagueInfo = new List(); protected List openCrossInfo = new List();
5) 当用户按下按钮时,我想显示第二个 .aspx 页面,该页面处理用户选择的特定组合框项目。这是我的“OnClick”事件处理程序:
protected void bTest_Click1(object sender, EventArgs e)
{
int idx = cbAvailableBowlers.SelectedIndex;
Session["openCrossLaneUniqueId"] = openCrossInfo[idx].laneUniqueId;
...// THIS FAILS:
// "ARGUMENT OUT OF RANGE" exception;
// "idx" is 0; openCrossInfo[] list is empty...
它不起作用...因为成员变量“openCrossInfo[]”和组合框属性 SelectedIndex 在执行 bTest_Click1 时似乎不再有效!
如何/在何处保存同一 session 中其他后续页面的 UI 状态?
请您参考如下方法:
页面的成员变量(例如 openCrossInfo)不会在请求之间持续存在。每次收到新请求时,都会再次创建 .aspx 的 Page 对象。因此,当 bTest_Click 事件触发时,它会使用 Page 对象的新副本。您的 openCrossInfo 数组没有值,因为页面对象是刚刚创建的,即使您在较早的请求中设置了它也是如此。
如果你想要保存状态,你将不得不使用其他东西,比如 session 状态。
