2014-02-18 33 views
0

我不是第一个抱怨OnSelectedIndexChanged在IE浏览器不点火,一旦部署:OnSelectedIndexChanged没有发射一旦部署

这里是我的代码:

<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属性是不见了

行...
所以现在我知道为什么事件不是从IE中触发。
...但为什么它呈现不同?

重要细节:这只发生一次部署到服务器(我相信它是IIS6)。本地,它工作正常。

另一个重要的细节:不幸的是,安装任何形式的补丁不是我的选择。

回答

0

原来这是一个众所周知的问题,与修正:
Scott Hanselman - bug in the browser definition files

.NET 2.0和.NET 4附带的浏览器定义文件中存在一个错误,即th它们包含一定范围的浏览器版本的定义。但某些浏览器(如IE 10)的版本不在这些范围内。因此,ASP.NET将它们视为未知浏览器,并默认为低级定义,这有一定的不便,就像它不支持JavaScript等功能一样。

该修补程序是要么
1.更新服务器的.NET(好主意)
2。加入适当的ie.browser(可以发现herehere)到App_browsers文件夹(如果第一种选择的解决方法是不可用。)

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 
} 
+0

事实是,我刚刚发布我的代码原样。你的代码更清洁,但并不能解决问题。你认为我应该把它放在这里,只是为了让它更易读? –

+0

我的意思是你为什么要从使用onInit的代码中调整事件处理程序,并且你有能力从客户端执行它?也许onInit函数延迟IE和Firefox – Sora

+0

OnInit发生在服务器上。为什么它会因不同的浏览器而有所不同? –