[英]How do I pass variable between .aspx pages after clicking [OK] in a C# web form
我是網絡表單的新手。
1) 我的默認網頁表單是 Default.aspx。 它有幾個組合框和一個 Button 控件:所有 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...
它不起作用......因為在執行 bTest_Click1 時,成員變量“openCrossInfo[]”和組合框屬性 SelectedIndex 似乎不再有效!
如何/在哪里為同一會話中的其他后續頁面保存 UI 狀態?
以下是在網頁之間傳遞數據的五種方法:
http://www.itorian.com/2012/07/5-ways-to-send-data-between-aspnet-pages.html
頁面的成員變量(例如 openCrossInfo)不會從請求到請求持續存在。 每次收到新請求時,都會再次創建 .aspx 的 Page 對象。因此,當 bTest_Click 的事件觸發時,它正在使用 Page 對象的新副本。 您的 openCrossInfo 數組沒有值,因為頁面對象剛剛創建,即使您在較早的請求中設置了它。
如果您想保存狀態,則必須使用其他內容,例如會話狀態。
正如 Jay Douglass 指出的那樣,問題在於原始頁面的成員變量“openCrossInfo”沒有保留到新的“回發”頁面。
解決方案是:
protected void Page_Load(object sender, EventArgs e)
{
scoringInfo = new ScoringInfo();
if (!IsPostBack)
{
// 1st time, use current date/time; create new data
leagueInfo = new List<LeagueInfoRec>();
openCrossInfo = new List<OpenCrossInfoRec>();
laneUniqueIds = new List<string>();
updateGui(DateTime.Now);
Session["leagueInfo"] = leagueInfo;
Session["openCrossInfo"] = openCrossInfo;
Session["laneUniqueIds"] = laneUniqueIds;
}
else
{
// Subsequent callbacks: retrieve state
leagueInfo = (List<LeagueInfoRec>)Session["leagueInfo"];
openCrossInfo = (List<OpenCrossInfoRec>)Session["openCrossInfo"];
laneUniqueIds = (List<string>)Session["laneUniqueIds"];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.