DropDownList 和 ListBox 的 OnSelectedIndexChanged 默认是不会立即触发的,除非 AutoPostBack 为 true。
但有时 AutoPostBack="true",在更改了选择项后,似乎仍然没有变化,到底是谁之过呢?
其实,我们只要分析一下原理,就很容易找出问题所在了。
也就是说如果有两个选项的 value 是相同的,则在这两个选项之间切换时,不会触发 OnSelectedIndexChanged 。由此可见比较的是选中项的 value,并不是 index,所以我觉得 OnSelectedIndexChanged 应该改名为 OnSelectedValueChanged 更合理一些。
验证一下:
由于第一项和第二项的 value 一样,所以即使选中了第二项,经过服务器端处理后,也会变成选中的是第一项。
那为什么客户端不传送选中项的 index 过来呢?这与 HTML 有关,HTML 中只传送 select 的选中项的 value,并不传送 index,虽然可以利用 JavaScript 实现 index 传送,但为了兼容面更广,所以并没有使用这种方法。并且 value 才是意义所在,绝大多数情况下,并不需要 value 相同的情况。