Skip to main content
 首页 » 编程设计

c#之在 C# Web 表单中单击 [确定] 后,如何在 .aspx 页面之间传递变量

2024年02月23日30zhengyun_ustc

我是网络表单的新手。

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 状态。