在Repeater中使用DropDownList调试回发问题时,我发现即使一切看起来像设置正确,DropDownList上用户的选择也不会从视图状态恢复。即使VS 2008暗示True,缺少DropDownList中的EnableViewState也会缺省为False?
我的DropDownList被定义为
<asp:DropDownList ID="EmployeeColumnDropDownList" runat="server" Visible="True" />
VS2008属性面板指示的EnableViewState为True 可见是真正的可以看出所以它应该被启用。然而,通过调试器并追踪Page_load,OnItemDataBound和我感兴趣的实际click_event,显示数据没有从视图状态填充。
我遇到的问题是,用户所做的选择没有被我的事件处理代码拾取,它似乎恢复到在初始页面开始时设置的内容的Page_Load(它具有强制性
if (!this.IsPostBack)
包装用于填充中继器和下拉列表。
插入特定的EnableViewState =“真”到我的定义如下解决了这个问题。
<asp:DropDownList ID="EmployeeColumnDropDownList" runat="server" Visible="True" EnableViewState="True" />
请记住,无论如何,VS2008在属性检查器中显示为True。
这是预期的行为?还是我通过强制条件通过解决方案?
我在问这个问题,因为这看起来有点奇怪,我不希望这段代码突然停止工作以后再咬我。
编辑澄清我是如何处理的代码
我正在使用一个中继器产生,都是从上通过中继器的每个循环中OnItemDataBound回调中填充一些下拉列表。
我有一个按钮以外的按钮,连接到一个onclick事件处理程序。这是这个处理程序不读取正确的用户选择。
编辑 - 视图状态似乎是一个红色的鲱鱼
经过研究和调试时间,我认为视图状态是一个红色的鲱鱼。
我在这里有一个错误,导致我的下拉列表不会在第一次回发时保留它们的选定状态(由按钮单击引起),当表单返回时,它们已经失去了它们的选择状态仍然有正确的内容)。
所有后续回发,使用相同的按钮保留正确的选择。所有代码都是相同的,就我所见所有回发。
就好像它没有正确地将请求参数合并到第一次回发中的视图状态。
我想设置一个非常简单的例子来深入研究,但它已经让我失去了将近一天的工作。我一直在考虑自己合并数据,但在我的情况下,中继器的存在并没有让事情变得简单。如果所有满足以下条件
欢呼声,但没有喜悦。 – 2010-10-31 11:05:46
已经特别检查了2)和3)另外我没有使用UpdatePanel。我不希望AutoPostBack作为下拉列表。我没有为页面值指定任何内容。我只是在页面级声明中添加的,它又被破坏了。不幸的是,我之前所做的还是再次破裂,所以我很担心,我需要深入研究DropDownLists的工作方式,因为这显然不是我以为他们做的。 – 2010-10-31 11:07:20
感谢您的编辑。这实际上就是我所拥有的(我在rpeater中生成了我的下拉列表,因为我有几个)。我的事件是按钮单击事件,然后读取下拉列表以获取用户输入,并且它们不反映选择。有趣的是,如果我允许在mu按钮点击处理程序后将页面返回给用户,则选择都是正确的。所以我现在要去狩猎如何阅读中继器中的下拉列表。 – 2010-10-31 11:31:59