如何通过回发在DataList中保留DropDownList的选择?

时间:2013-01-08 01:21:17

标签: asp.net drop-down-menu postback viewstate datalist

我是ASP.NET的初学者,但我正在尝试修复其他人编写的应用程序中的错误:下拉列表的选择不会在回发中保留。

以下是我认为代码的相关部分:

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

我相信我可以将当​​前选择存储在会话中,静态变量或其他地方,但这似乎更像是一种解决方案。

4 个答案:

答案 0 :(得分:1)

通常可以将EnableViewState设置为“true” - 如下所示:

<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 = false的代码隐藏类中完成;或者作为@ Page级别指令 - &lt;%@ Page EnableViewState =“False”%&gt;。

答案 1 :(得分:0)

首先检查页面视图状态设置为True的False。包括EnableViewState =“true”肯定会在这里服务于你的目的,你不需要在会话等中保存选择。

答案 2 :(得分:0)

在代码隐藏中,在页面的Init事件而不是Load事件中执行数据绑定可以解决问题。但是,缺点是在Init期间未填充某些控制值。

答案 3 :(得分:0)

一位同事指出,Page_Load方法正在重新绑定DataList,即使当前请求是回发后的。如果请求不是回发,则将此更改为仅将数据绑定到DataList即可解决此问题。

这似乎是问题的根本原因,所以我认为这是最好的解决方案。