在Chrome中滚动ListBox时回发

soh*_*rab 5 c# asp.net google-chrome listbox autopostback

使用滚动列表框,页面将刷新(不需要的).

这个问题只出现在chrome(第27版)中.在其他浏览器中它可以正常工作

.aspx文件:

<asp:Label runat="server" ID="label1" ></asp:Label>
<asp:ListBox ID="ListBox1" runat="server"
    OnSelectedIndexChanged="ListBox1_SelectedIndexChanged"
    DataValueField="f1" DataTextField="f2" DataSourceID="SqlDataSource1" 
    Rows="15" AutoPostBack="true" >
</asp:ListBox>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    SelectCommand="sp1" SelectCommandType="StoredProcedure"
    ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>">
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)

.cs文件:

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    label1.Text = ListBox1.SelectedItem.Text;
}
Run Code Online (Sandbox Code Playgroud)

小智 2

我们最近才注意到这个不幸的错误,该错误发生在一个已经运行很长时间没有问题的页面上。它特定于 Google Chrome 版本 27,我目前使用的是版本 26。

该错误:(单击控件内部的任意位置 - 滚动条是问题的焦点 - 导致完整的回发[假设您将 AutoPostBack 属性设置为 true])

该错误可能位于更高级别的脚本编写中,我不确定它会影响我们所有的列表框。这似乎不太可能,因为我们有很多,在多个页面上,如果所有人都表现出这种行为,我们就会接到电话。

我们的解决方案包含两个选项,另一个选项不太优雅:1)不切实际:等待 Google Chrome 的更新,或明确使用版本 26。对于没有安装权限或回滚到以前版本的能力的大型用户群来说,这是不切实际的。如果您出于某种原因绝对必须针对最新版本的 Chrome 进行测试,它也不起作用。

2) 我们可以访问 Telerik 控件,这使我们能够使用 RadListBox 来代替,稍微多一点的视图状态开销,这对您来说可能不是一个好的解决方案,如果它是一个选项的话。这是我们选择的选项,因为 RadListBox 避免了问题行为。

第三种远非那么吸引人的解决方案:寻找其他替代方案来显示数据,例如下拉列表,如果您正在处理大量信息,可能需要使用辅助子选择控件。在此期间,需要做更多的工作,并且您可能希望在修复后恢复所做的更改。

我知道所有这些都是平庸的解决方案,但它们是可能的解决方法。抱歉,如果这没有多大帮助。