2013-01-08 49 views
0

我是ASP.NET的初學者,但我試圖修復其他人編寫的應用程序中的錯誤:下拉列表的選擇不會保留在回發中。如何在回發中保留DataList中DropDownList的選擇?

這裏是什麼,我相信是代碼的相關部分:

<asp:DataList ... OnItemDataBound="PopulateDropDownList"> 
    ... 
    <FooterTemplate> 
     <asp:DropDownList ... AutoPostBack="true" OnSelectedIndexChanged="DoSomething"/> 
    </FooterTemplate>        
</asp:DataList> 

我相信我可以存儲在會話中的當前選擇,靜態變量或其他地方,但是這似乎更像是一個工作 - 那麼一個解決方案。

回答

0

一位同事指出,Page_Load方法重新綁定了DataList,即使當前請求是回發。如果請求不是回顯,則通過將此更改爲僅將數據綁定到DataList解決了問題。

這似乎是問題的根源,所以我認爲這是最好的解決方案。

1

通常你可以設置的EnableViewState爲「真」 - 如下:

<asp:DropDownList ... EnableViewState="true" ...> 
</asp:DropDownList>` 

但我不是100%肯定,如果它的工作原理DataList控件內以同樣的方式,但我猜測它應該。

您可以從Understanding ASP.NET View State瞭解關於視圖狀態的更多信息。

請確保您只爲您絕對需要的控件啓用ViewState,否則會遇到內存問題。從上面的源代碼(我的重點):

EnableViewState屬性是在System.Web.UI.Control類中定義的,所以所有的服務器控件都有這個屬性,包括Page類。 因此,您可以通過將Page類的EnableViewState設置爲False來指示整個頁面的視圖狀態不需要保存。(這可以通過或者在代碼隱藏與Page.EnableViewState =假類;或作爲@網頁級指令 - <%@頁的EnableViewState =「假」%>

+0

設計者表示默認情況下這是'true'。我沒有把它設置爲「假」。 – Sam

+0

@Sam:對於頁面級別,是的,「EnableViewState」默認爲true,但對於單個控件,您必須明確設置它。請參閱我的編輯。讓我知道你是否仍然有麻煩。 – Chaithanya

+0

@Sam:你也可以嘗試將EnableViewState設置爲 Chaithanya

0

首先檢查頁面。視圖狀態設置爲True False。包括EnableViewState =「true」在這裏肯定會用到你的目的,你不需要在會話中保存選擇等。

+0

這工作在我設置的一個非常簡單的測試頁面,但在實際的頁面中,這是非常大的,這不起作用。 – Sam

+0

你能分享整個aspx代碼嗎? – Umesh

+0

Nah;它差不多有1000行,而且來自一個商業項目。 – Sam

0

在代碼隱藏中,在數據綁定頁面的Init事件而不是Load事件可以解決這個問題。但是,這樣做的一個缺點是在Init期間一些控制值不會被填充。

相關問題