我有一个页面,其中Dropdownbox(selUsers)是从pageload上的数据库填充的。
On LoadComplete我根据maser页面的值设置值。
selUsers.SelectedValue = master.intUserID
这似乎工作正常,因为下拉框中显示正确的文本。
我有一个调用sub的按钮。在那个sub中,我称之为selUsers.SelectedItem.Value或selUsers.SelectedValue我得到下拉框中第一个项目的值而不是选定的值。
我一直在阅读,我看到设置值的代码必须在ispostback中,但我不是回发页面,也不是我想要的。是否真的如此,即使您设置了下拉列表的值,在您将页面发回后,它是否真的设置好?如果不是这样,为什么我没有得到正确的值。
在你问之前,我已经搜索了代码,并且在其他任何地方都没有反弹,或者重置值。
答案 0 :(得分:0)
整个页面生命周期可能会让人感到困惑。
我建议你阅读本文(文章:ASP.NET页面生命周期概述)https://msdn.microsoft.com/en-us/library/ms178472.aspx
但要回答你的问题:
如果单击该按钮,则会按此特定顺序(与您的问题相关)进行以下操作:
1)页面加载事件被引发:这是您获取数据和数据绑定的地方,因此“重置”#39;也是下拉列表中的选定值。
2)按钮点击事件被引发(这是一个项目事件):你读出你想要读出的值 但是,由于您还没有达到LoadComplete(您将设置新的选定值),您将看到列表中的第一个值。
3)引发加载完成事件:在此处设置正确的选定值。
所以,是的,如果你点击一个asp网页表单的按钮(默认情况下),它会导致回发并经历整个页面生命周期来构建响应'你的行动。在构建页面时,您必须考虑到这一点。
您可以在调试时看到此操作:在代码后面的3个点放置断点,然后单击按钮。
要解决您的问题,您需要在下载下拉列表之后和读出所选值之前设置所选值。
希望这有帮助。