相信DropDownList 控件不能觸發SelectedIndexChanged 事件已經不是什么新鮮事情了,原因也無外乎以下幾種:
1、DropDownList 控件的屬性 AutoPostBack="True" 沒有寫;
2、DropDownList 控件的數據綁定沒有放在if (!Page.IsPostBack) 里面;
3、DropDownList 控件選定項的value 值只有在發生變化時,才將信息發往服務器;
詳細內容在六年前lovecherry 的一篇博文講解得很清楚,地址:http://www.cnblogs.com/lovecherry/archive/2005/04/26/145705.html
可是,如果以上問題都排除以后,DropDownList 控件仍然不能觸發SelectedIndexChanged 事件的話,那會是什么原因呢?
很幸運,本人今天遇見了。并且最有意思的是:
在火狐(Firefox)中,DropDownList 控件能夠觸發SelectedIndexChanged 事件;
而在 IE 8中,不好意思,DropDownList 控件對選擇項后毫無反應,就連Page_Load 事件都根本沒有進去!
所以,錯誤根本不在DropDownList 控件本身的原因上。
折騰了快2個小時后,得出結論:
由于本人的程序使用了<frameset> 框架,并且DropDownList 控件所在的頁面是使用 window.showModalDialog() 彈出的模態對話框,
所以,submit 默認會提交到新的頁面窗口。
解決辦法也很簡單,只要在該頁面窗口中的<head> 中添加如下代碼:
<base target=_self></base>
即可!
其實,原因的根本是:
在使用 showModalDialog 的模態窗體中,必須加上<base? target=_self></base> 才可以提交,否則就會彈出新的窗口了。
所以很多時候,錯誤的原因并不是我們認為的那樣,換一個角度、換一種思路、換一種方式,可能更容易解決問題。
作者: XuGang?? 網名:鋼鋼
出處: http://xugang.cnblogs.com
聲明: 本文版權歸作者和博客園共有!轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文連接。