2013-03-06 15 views
5

z przewijaną listą pole, strona zostanie odświeżona (niechciane).odświeżenie po przewinięciu ListBox w chrome

ten problem występuje tylko w wersji chrome (wersja 27). W innych przeglądarkach działa poprawnie.

.aspx pliku:

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

plik .cs:

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

Wersja 27 jest bardzo wczesną wersją beta - może to błąd Chrome? - w końcu masz autopostback. – Aristos

+0

Jeśli ustawisz 'AutoPostBack =" true "' równe 'false' to nadal się dzieje? – Brian

+0

Jeśli masz starsze wersje Chrome, sprawdź to. – sohrab

Odpowiedz

2

Zauważyliśmy ten niefortunny błąd, dopiero od niedawna, na stronie, która pracuje bez problemu na bardzo długi czas . Jest to specyficzne dla przeglądarki Google Chrome w wersji 27 i obecnie używam wersji 26.

Błąd: (kliknięcie w dowolnym miejscu wewnątrz kontrolki - pasek przewijania w centrum uwagi - powoduje całkowite odświeżenie strony [pod warunkiem, że ustawiłeś atrybut AutoPostBack do true])

błąd może być na wyższym poziomie skryptów, i nie jestem pewien, że to wpływa na wszystkie nasze listboxes. Wydaje się to mało prawdopodobne, ponieważ mamy wiele, na wielu stronach i otrzymalibyśmy telefony, gdyby wszystkie z nich wykazywały takie zachowanie.

Nasze rozwiązanie zawiera dwie opcje, przy czym inna opcja jest mniej elegancka: 1) Niepraktyczne: czekać na aktualizację przeglądarki Google Chrome lub jawnie używać wersji 26. Jest to niepraktyczne w przypadku dużej bazy użytkowników, która nie ma uprawnień do instalacji lub możliwości przywrócenia poprzedniej wersji. Nie działa również, jeśli z jakiegokolwiek powodu absolutnie musisz przetestować najnowszą wersję Chrome.

2) Mamy dostęp do elementów sterujących Telerik, które umożliwiają nam korzystanie z RadListBox zamiast tego, nieco więcej narzutów na stan ekranu, co może nie być dobrym rozwiązaniem dla ciebie, jeśli w ogóle jest to opcja. To była opcja, którą wybraliśmy, ponieważ RadListBox ucieka od problemu.

Odległe trzecie, znacznie mniej atrakcyjne rozwiązanie: znajdź inną opcję wyświetlania danych, taką jak lista rozwijana, ewentualnie z wtórnym kontrolowaniem ponownej selekcji, jeśli masz do czynienia ze szczególnie dużym zbiorem informacji. W międzyczasie jest więcej pracy i prawdopodobnie chcesz cofnąć zmiany po wprowadzeniu poprawki.

Znam wszystkie te rozwiązania są mierne, ale są możliwe rozwiązania. Przepraszam, jeśli to nie pomoże.

+0

Metoda obejścia tego problemu w przeglądarce Chrome 27: użytkownik wybiera aktualnie wyróżniony element w polu listy, aby nadać mu kontrolę. Użytkownik może następnie manipulować paskiem przewijania bez wywoływania zdarzenia oddzwonienia. To oczywiście nie jest rozsądne obejście, które można przekazać klientowi, ale pozwala na obsługę kontroli w celu debugowania. –

1

Wyłącz AutoPostBack dla pola listy, należy użyć atrybutu onclick ListBox uruchomić javascript robi __doPostBack dla niego. To jest praca wokół. Myślę, że Google powinien naprawić ten błąd Chrome (27 i 28, ...). To, AutoPostBack True of ListBox, działa dobrze we wszystkich innych przeglądarkach. 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> 
1

Funkcja mypostback JavaScript nie działa, jeśli listbox ma SelectionMode="Multiple"

2

Jest to błąd występujący w niektórych wersjach Chrome (jak inni to zauważyli). Podobne zachowanie miałem w Chrome w poprzedniej wersji v27.

Należy zaktualizować Chrome do najnowszej wersji: moja wersja jest obecnie przeciwko 27.0.1453.116 m i problem wydaje się być rozwiązany w tym wydaniu.

Powiązane problemy