在Chrome中滚动ListBox时回发

时间:2013-03-06 23:55:01

标签: 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>

.cs文件:

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    label1.Text = ListBox1.SelectedItem.Text;
}

6 个答案:

答案 0 :(得分:2)

我们最近才注意到这个不幸的错误,在很长一段时间没有问题的网页上。它特定于谷歌Chrome版本27,我目前使用的是版本26。

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

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

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

2)我们可以访问Telerik控件,这使得我们可以使用RadListBox,稍微多一些viewstate开销,如果它是一个选项,可能不是一个很好的解决方案。这是我们选择的选项,因为RadListBox可以解决问题行为。

一个遥远的第三个,实际上不太吸引人的解决方案:找到一些其他替代方案来显示您的数据,例如下拉列表,如果您正在处理特别大的信息,可能还有辅助子选择控件。在过渡期间,这是更多的工作,您可能希望在修复时还原您的更改。

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

答案 1 :(得分:2)

这是某些Chrome版本中的错误(正如其他人所说)。在早期的v27版本中,我在Chrome上获得了同样的行为。

您应该将Chrome升级到最新版本:我的版本目前为27.0.1453.116 m,此版本中的问题似乎已修复。

答案 2 :(得分:2)

这是Chrome的第27版中的问题,更新到最新版本应解决此问题。

http://googlechromereleases.blogspot.co.uk/2013/06/stable-channel-update_18.html

答案 3 :(得分:1)

禁用ListBox的AutoPostBack,使用ListBox的onClick属性来运行为其执行__doPostBack的javascript。这是一个解决方案。我认为谷歌应该修复这个Chrome错误(版本27和28,...)。它,ListBox的AutoPostBack True,适用于所有其他浏览器。 TY Pien。

<script type="text/javascript">
function mypostback(id, parameter)
{
  __doPostBack(id, parameter)
}
</script>

<asp:ListBox ID="lstbox_id" runat="server" onclick="mypostback('lstbox_id','')">
</asp:ListBox>

答案 4 :(得分:1)

如果列表框中包含SelectionMode="Multiple"

,则JavaScript函数mypostback不起作用

答案 5 :(得分:1)

这绝对是Chrome中的bug(例如v.27.0.1453.110 m)。另见this answer