如何在回发时保留数据列表中DropDownList的选择?



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

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

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

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

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

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

但是我不能100%确定它是否以同样的方式在数据列表中工作,但我猜它应该。

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

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

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

第一个检查Page view state设置为True或False。包括EnableViewState="true"在这里肯定会达到你的目的,你不需要在会话中保存选择等

在代码隐藏中,在页面的Init事件而不是Load事件中执行数据绑定可以解决问题。然而,这样做的一个缺点是在Init期间没有填充一些控制值。

一位同事指出,即使当前请求是回发,Page_Load方法也会重新绑定DataList。这个问题已经解决了,修改为只有当请求不是回发时才将数据绑定到DataList

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

相关内容

  • 没有找到相关文章

最新更新