c# Postback beim Scrollen von ListBox in Chrome




asp.net google-chrome (5)

Mit dem Scroll-Listenfeld wird die Seite aktualisiert (unerwünscht).

Dieses Problem besteht nur in Chrom (Version 27). In anderen Browsern funktioniert es einwandfrei.

.aspx-Datei:

<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-Datei:

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

Wir haben diesen unglücklichen Fehler erst kürzlich auf einer Seite bemerkt, die lange Zeit ohne Probleme funktioniert hat. Es ist spezifisch für Google Chrome Version 27 und ich verwende derzeit Version 26.

Der Fehler: (Klicken Sie irgendwo innerhalb des Steuerelements - die Bildlaufleiste ist der Schwerpunkt des Problems - verursacht einen vollständigen Postback [vorausgesetzt, dass Sie das AutoPostBack-Attribut auf True setzen])

Der Fehler könnte auf einer höheren Ebene des Skripts liegen, und ich bin mir nicht sicher, ob dies alle unsere Listboxen betrifft. Es scheint unwahrscheinlich, da wir viele haben, auf mehreren Seiten, und wir würden Anrufe bekommen, wenn alle von ihnen dieses Verhalten zeigen würden.

Unsere Lösung beinhaltete zwei Optionen, wobei eine andere Option weniger Klasse ist: 1) Unpraktisch: auf ein Update für Google Chrome warten oder Version 26 explizit verwenden. Dies ist für eine große Benutzerdatenbank, die keine Berechtigungen für die Installation oder die Möglichkeit zum Zurücksetzen auf eine frühere Version besitzt, nicht praktikabel. Es funktioniert auch nicht, wenn Sie aus irgendeinem Grund absolut gegen die neueste Version von Chrome testen müssen.

2) Wir haben Zugriff auf Telerik-Steuerelemente, die es uns ermöglichen, RadListBox stattdessen zu verwenden, etwas mehr Viewstate-Overhead, der für Sie keine gute Lösung sein kann, wenn es überhaupt eine Option ist. Dies war die Option, die wir gewählt haben, da die RadListBox das Problemverhalten vermeidet.

Eine distanzierte dritte, wesentlich weniger ansprechende Lösung: Suchen Sie nach einer anderen Alternative für die Anzeige Ihrer Daten, z. B. eine Dropdown-Liste, möglicherweise mit einer sekundären Unterauswahlsteuerung, wenn Sie mit besonders umfangreichen Informationen zu tun haben. In der Zwischenzeit ist es mehr Arbeit, und Sie würden wahrscheinlich Ihre Änderungen rückgängig machen wollen, wenn eine Reparatur vorgenommen wurde.

Ich weiß, dass all diese mittelmäßigen Lösungen sind, aber sie sind mögliche Problemumgehungen. Tut mir leid, wenn das nicht viel hilft.


Es ist definitiv ein Bug in Chrome (zBv27.0.1453.110 m). Siehe auch diese Antwort .



Dies ist ein Fehler in einigen Chrome-Versionen (wie andere bemerkt haben). Ich habe das gleiche Verhalten in Chrome auf einer früheren v27-Version erhalten.

Sie sollten Chrome auf die neueste Version aktualisieren: Meine Version ist derzeit v 27.0.1453.116 m und das Problem scheint in dieser Version behoben zu sein.


Deaktivieren Sie das AutoPostBack für die ListBox, verwenden Sie das onClick-Attribut der ListBox, um ein JavaScript auszuführen, das __doPostBack dafür ausführt. Es ist eine Arbeit herum. Ich denke, Google sollte diesen Chrome-Bug beheben (ver 27 und 28, ...). Es, AutoPostBack True von ListBox, funktioniert gut in allen anderen Browsern. 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>




autopostback