首先,我很抱歉我不能提供代码。问题是在 asp.net webforms 应用程序中的以下问题,我有 2 个列表框,每个列表框都有 SelectedIndexChanged 事件,(这些事件中的代码只是将项目从一个列表移动到另一个列表,反之亦然)处理当有 PostBack 并且选择了某个元素时。我有 1 个带有单击事件但没有代码的简单按钮,假设它只是用于执行 PostBack。现在,问题出现了,因为我有另一个按钮可以激活另一个事件,但是如果我从任何列表框中选择了一个项目,首先执行的是 SelectedIndexChanged 事件,然后是第二个按钮调用的事件,实际上我只想要要执行的第二个按钮的事件,我能解释一下吗?我怎么能避免这种情况?
正如您在此示例图像中看到的那样,如果我单击 Save 按钮,从左侧的列表框中选择了一个项目,应用程序所做的是调用该列表框的 SelectedIndexChanged 事件,然后才调用 Save 事件,并且由于 PostBack 问题,这就像这样工作。有没有一种避免这种情况的好方法来实现?
问题是您没有将代码放入正确的事件处理程序中。
正如您所解释的,如果在 ListBox 中选择了一个项目,则您将代码放在 ListBox 的 SelectedIndexChanged 事件中,当您单击某个按钮时要执行该事件。
如果您希望在单击某个按钮时执行代码,那么合乎逻辑的事情是所述代码位于按钮单击事件的处理程序中。
另一方面,如果您希望每次用户在 ListBox 中选择不同选项时都执行代码,那么您需要将 ListBox 的 AutoPostBack 属性设置为 true 并使用其 SelectedIndexChanged 事件。
我了解在您的情况下,我们处于第一种情况。因此,您应该删除 SelectedIndexChanged 事件处理程序并将代码包含在按钮的 Click 事件处理程序中,以检查 ListBox 中是否选择了某些内容。
我们在这种情况下:
单击按钮执行 SelectedIndexChanged 方法,然后执行按钮本身的方法。
查看:
两个 ListBox 的 PostBack 处于活动状态
OnLoad 事件不调用任何 SelectedIndexChanged 事件
按钮的 OnClick 事件错误地没有调用列表框的 SelectedIndexChanged 方法之一
您可以使用 Ajax 扩展 UpdatePanel 控件(已预装在 Visual Studio 中),它们仅用于回发它们所包含的页面部分,安排您的 ListBox 和 UpdatePanel 如下所示:
我现在给你解释一下:
查看 Page_Load 事件是否正在调用 SelectedIndexChanged 事件或将所选项目移动到另一个列表的某些方法。
回发之后,首先执行 Page_Load ,然后执行按钮事件(例如 Button_Click )。
我希望它对你有帮助!