2011-03-09 171 views
1

我有幾個頁面鏈接在一起,我想維護下拉選擇。我已經看到很多方法可以通過會話值等來實現,但我想設置默認值,同時還可以選擇其他值。如何根據變量設置下拉列表默認值?

實際上,用戶將在頁面1上進行選擇,然後在頁面2上進行選擇,他們將使用這些相同的選擇,但也可能想要更改他們的選擇。我的想法是,我可以將選擇加載到第1頁的SQL表中,然後在第2頁中調用該表並將值設置爲變量。那麼我的問題是,我將如何將默認下拉值設置爲變量而不是設置值。

我正在使用VisualStudio2010和使用C#的ASP Webforms。

任何幫助或建議將不勝感激!

回答

1

我當然不會爲此使用表格。你第一次使用會話的猜測可能是正確的。好像你有印象,但是你不能改變會話值,...

您的網頁應工作就像你喜歡:

有第1頁的用戶選擇項目,然後存儲這些會話中的值。 然後在第二頁上,將會話中的值設置爲下拉列表中的默認值。如果他們改變了他們的選擇,只需將會話變量更新爲新值即可。 然後你可以重複無限次。

編輯: 實例,

設置會話變量:

Session["DropDownValue1"] = DropDownList1.SelectedIndex;

設置一個下拉的默認valuie:在第二示例

DropDownList1.SelectedIndex = (int?)Session["DropDownValue1"] ?? 0;

??是一個空合併運算符。這意味着如果它之前的對象是空的,那就使用它之後的東西。

您將在同時使用這些例子的代碼隱藏文件*.cs

然後你就可以有一個OnSelectedIndexChanged事件來更新第二頁上的會話變量,一旦用戶改變它,如果你喜歡。

加入這個屬性到你的DropDownList在*.aspx文件: OnSelectedIndexChanged="Index_Changed"

隨着事件處理程序代碼在您的代碼隱藏*.cs文件:

void Index_Changed(Object sender, EventArgs e) { 

    Session["DropDownValue1"] = DropDownList1.SelectedIndex; 
} 
+0

@ BinaryTox1n - 我是ASP.Net的新手。你可以給我代碼示例(特別是聲明會話值並將它們作爲默認值),並告訴我它們進入哪個文件(aspx,後面的代碼)?非常感謝您的快速響應! – Kate 2011-03-09 18:08:55

+0

@Kate我已經更新了答案以提供一些示例。讓我知道,如果有什麼不清楚。 – BinaryTox1n 2011-03-09 19:48:25

+0

@ BinaryTox1n - 感謝您的例子!幾個簡單的問題:selectedindex和selectedvalue(我正在使用)之間有什麼區別?另外,我是否會將用於在頁面1和頁面2中設置默認值的代碼添加進去,因爲它將在兩個頁面上更新?另外,.cs中的設置默認值代碼會去哪裏?我試圖把它放在page_load中,它給了我一個錯誤。是否有不同的事件放入?再次感謝! – Kate 2011-03-09 19:52:53

0

數據庫的工作,但你也可以使用cookies或Session。你需要做的是在下拉列表selectionchanged事件中,將這些值保存到Session中(例如)。然後,當第二頁的page_load事件觸發時,請閱讀那些會話值。

對於下拉列表,您可以從對象或常量/值中設置選定的值。

string myVal = Session["listChoice"]; 
lstChoices.SelectedValue = myVal; 
+0

@Thyamine - 感謝您的快速響應!您顯示的代碼是否會放在第二頁上的代碼中?我最初如何聲明會話變量?如果我在下拉菜單中更改我的選擇,這些更改會改變嗎?謝謝! – Kate 2011-03-09 18:10:35

+0

@Kate - 通過在那裏保存一個對象來設置會話狀態。所以在第一頁你會寫出'Session [「myKeyName」] = lstDropDown.SelectedValue; '在頁面後面的代碼中,然後是我之前在第二頁中寫的。您使用的密鑰由您決定,因此它不會根據下拉名稱進行更改。 – Thyamine 2011-03-09 18:12:30

+0

@Thyamine - 我把'Session [「PAG」] = DdlPAG.SelectedValue;'在我的page_load頁面1和'if(Session [「PAG」]!= null {DdlPAG.SelectedValue = Session [「PAG」]。ToString();}'在我的Page_Load中。 1到第2頁,但當我嘗試更改第2頁上的選擇時,它將它切換回會話變量。是否有辦法讓第2頁的選擇覆蓋並更改會話變量? – Kate 2011-03-09 19:43:45

0

您可以將它Session,如果你想只持續了Session期限。如果你想要持續更長時間,你可以使用cookie,否則你需要將它存儲在數據庫中。

當你第一次加載DropDownList只是檢查,看看是否你應該尋找一個存儲的默認缺省值:

// Initialize the DDL then check for the default value 
if (Session["DDL1Default"] != null) 
{ 
    ddl1.SelectedValue = Session["DDL1Default"].ToString(); 
} 

當用戶選擇一個值,然後導航你應該保存它:

// in some navigate event 
Session["DDL1Default"] = ddl1.SelectedValue; 
+0

這對我來說是爲了將值從頁面1保存到頁面2,但是如果我在第2頁上更改了選擇,我如何將其更新爲新的會話值?謝謝! – Kate 2011-03-09 19:35:52

+0

@Kate與您最初存儲它的方式相同。只需將值從DropDownList中取出並存儲即可:Session [「DDL2Default」] = ddl2.SelectedValue;'Session'只是一個容器,您可以從任何頁面事件中讀取和寫入它。 – Kelsey 2011-03-09 20:13:42

+0

當我嘗試時,它將默認設置爲下拉列表中的第一行,而不是我實際選擇的內容。 – Kate 2011-03-09 20:48:42

0

您仍然可以使用會話變量。
Page_Load,設置下拉列表中的SelectedValue

myDropDownList.SelectedValue = Session["myDropDownValue"].ToString(); 


編輯
當然。只需更新myDropDownList_OnSelectedChange()事件處理程序中的變量即可。您需要確保將其他代碼(您在Page_Load中將頁面1中的值設置爲if(!IsPostBack))防止下拉列表不更新。

+0

是否有可能讓頁面2上的選擇更改並更新Session變量?現在它只能在一個方向上工作,但我需要能夠在任一頁上更改選擇。謝謝! – Kate 2011-03-09 19:36:44

+0

請參閱上面的修改。 – Marcus 2011-03-09 20:43:42

0

謝謝大家!它現在正在工作。萬一別人運行到這一點,這是我結束了:

第1頁和第2頁代碼隱藏在Page_Load中節:

 if (!Page.IsPostBack) { 
      if (Session["PAG"] != null) { 
       DdlPAG.SelectedValue = Session["PAG"].ToString(); } } 
     Session["PAG"] = DdlPAG.SelectedValue; 

再次感謝!