2012-10-06 33 views
-1

我想保留選擇的項目重新加載頁面後:爲什麼沒有的IsPostBack使用下拉框工作

摘自的.aspx:

<asp:DropDownList ID="MyDropDown" runat="server" AutoPostBack="true" 
     onselectedindexchanged="MyDropDown_SelectedIndexChanged"> 

    </asp:DropDownList> 

Exerpt在Page_Load中

 if (!IsPostBack) 
     { 
      PopulateDropDownList(); 
     } 

的.cs與

private void PopulateDropDownList() 
    { 
     MyDropDown.Items.Add("1"); 
     MyDropDown.Items.Add("2"); 
    } 

    protected void MyDropDown_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Response.Redirect(Request.RawUrl); 
    } 
+1

您正在重定向到同一頁面,而不是回發。 –

+0

3個相同主題的問題! :) http://stackoverflow.com/questions/12740738/why-asp-net-dropdown-with-autopostback-doesnt-keep-my-selected-value http://stackoverflow.com/questions/12737240/aspnet -response-redirectrequest-rawurl-doesnt-work and this one .... – Aristos

+0

不一樣:每次都有一個進步和不同的概念。 – user310291

回答

1

Re sponse.Redirect刷新頁面,你將鬆散的視圖狀態,將有選定的索引。重定向之前,您可以將選定的索引放入會話中。

protected void MyDropDown_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Session["MyDropDownSelectedIndex"] = MyDropDown.SelectedIndex.ToString(); 
    Response.Redirect(Request.RawUrl); 
} 
+0

這是不好的做法,不能解決任何問題,因爲這種方式需要再次在下拉列表頁面加載時選擇該值。如果用戶打開兩個相同的頁面會怎麼樣?在會議上相同的價值,大混亂.... – Aristos

+0

我同意但爲什麼在MyDropDown_SelectedIndexChanged中使用Response.Redirect? – Adil

+0

我使用Response.Redirect,因爲我需要重新加載頁面,因爲內容取決於從下拉列表中選擇的內容(數據庫名稱) – user310291

1

您需要填充Page init事件中的下拉列表。如果在頁面加載事件期間這樣做,則無法正確還原視圖狀態(因爲在頁面加載事件之前沒有填充下拉列表),因此無法觸發選定的索引更改事件。

編輯:你可能想要緩存填充下拉列表的數據來保存一些到數據庫的行程。我認爲你也不需要在選定索引改變的事件上重定向。

+0

我需要重新加載頁面,因爲內容取決於從下拉列表中選擇的內容。 – user310291

+0

我試圖放入初始化,但它仍然不記得我的選擇 – user310291

+0

這是因爲重定向,刪除重定向並將其替換爲代碼以基於所選索引呈現不同的內容。 – airmanx86

相關問題