OnSelectedIndexChanged一旦部署就不会触发

时间:2014-02-18 09:33:59

标签: javascript asp.net internet-explorer

一旦部署,我不是第一个抱怨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)。在本地,它工作正常。

另一个重要细节:遗憾的是,安装任何类型的补丁都不适合我。

2 个答案:

答案 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(可以找到herehere)添加到App_browsers文件夹(如果第一个选项不可用,则采用解决方法。)