一旦部署,我不是第一个抱怨OnSelectedIndexChanged没有在IE中解雇的人:
这是我的代码:
<asp:DropDownList id="MyDropDownList" runat="server">
<asp:ListItem Text="Life" Value="1" />
<asp:ListItem Text="Universe" Value="2" />
<asp:ListItem Text="Everything" Value="42" />
</asp:DropDownList >
和
protected override void OnInit(EventArgs e)
{
MyDropDownList.AutoPostBack = true;
MyDropDownList.SelectedIndexChanged += new EventHandler(MyDropDownList_SelectedIndexChanged);
}
protected void MyDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
//lots of cool stuff
}
现在让我们深入研究结果HTML 。
这是Chrome,(或兼容模式的IE):
<select name="MyDropDownList" onchange="javascript:setTimeout('__doPostBack(...)', 0)" id="MyDropDownList">
<option value="1" selected="selected">Life</option>
<option value="2">Universe</option>
<option value="42">Everything</option>
</select>
这是IE10 / IE11(没有兼容性):
<select name="MyDropDownList" id="MyDropDownList">
<option value="1" selected="selected">Life</option>
<option value="2">Universe</option>
<option value="42">Everything</option>
</select>
惊喜!
onchange
属性已消失!
OK ...
所以现在我知道为什么事件不会从IE发出。
......但为什么它呈现不同?
重要细节:只有部署到服务器后才会发生这种情况(我相信它是IIS6)。在本地,它工作正常。
另一个重要细节:遗憾的是,安装任何类型的补丁都不适合我。
答案 0 :(得分:0)
你为什么不这样做:
<asp:DropDownList id="MyDropDownList" runat="server" AutoPostBack="true" onSelectedIndexChanged="MyDropDownList_SelectedIndexChanged" >
<asp:ListItem Text="Life" Value="1" />
<asp:ListItem Text="Universe" Value="2" />
<asp:ListItem Text="Everything" Value="42" />
</asp:DropDownList >
并在服务器端:
protected void MyDropDownList_SelectedIndexChanged(object sender,EventArgs e)
{
//do stuff here
}
答案 1 :(得分:0)
原来这是一个已知问题,修复:
Scott Hanselman - bug in the browser definition files
.NET 2.0和.NET 4附带的浏览器定义文件中存在一个错误,即它们包含某些浏览器版本的定义。但某些浏览器(如IE 10)的版本不再在这些范围内。因此,ASP.NET将它们视为未知浏览器,默认为低级定义,这有一些不便之处,例如它不支持JavaScript等功能。
修正案要么是
1.更新服务器的.NET(好主意)
2.将相应的ie.browser
(可以找到here或here)添加到App_browsers
文件夹(如果第一个选项不可用,则采用解决方法。)