0

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

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

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

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

4

4 回答 4

1

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

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

但我不是 100% 确定它是否在 DataList 中以相同的方式工作,但我猜它应该。

您可以从了解 ASP.NET视图状态中了解有关视图状态的更多信息。

确保只为绝对需要的控件启用 ViewState,否则会遇到内存问题。从上述来源(强调我的):

EnableViewState 属性在 System.Web.UI.Control 类中定义,因此所有服务器控件都具有此属性,包括 Page 类。因此,您可以通过将 Page 类的 EnableViewState 设置为 False 来指示不需要保存整个页面的视图状态。(这可以在 Page.EnableViewState = false 的代码隐藏类中完成;或者作为@Page 级指令 - <%@Page EnableViewState="False" %>。

于 2013-01-08T01:31:22.770 回答
0

首先检查页面视图状态是否设置为 True of False。包括 EnableViewState="true" 肯定会在这里达到您的目的,您无需在会话等中保存选择。

于 2013-01-08T01:48:36.463 回答
0

在代码隐藏中,在页面Init事件而不是Load事件中进行数据绑定可以解决该问题。但是,这样做的一个缺点是某些控制值在Init.

于 2013-01-08T03:08:42.277 回答
0

一位同事指出,即使当前请求是回发,该Page_Load方法也会重新绑定。如果请求不是回发,则DataList通过将其更改为仅将数据绑定到 来解决问题。DataList

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

于 2013-01-09T21:43:07.550 回答