2011-08-11 4 views
5

Mam tę DropDownList wewnątrz DataList.ASP.NET - DropDownList zawiera nieprawidłową wartość po kliknięciu przycisku Back-Browser

<asp:DropDownList runat="server" ID="DDL_ProdCat" OnSelectedIndexChanged="DDL_ProdCat_SelectedIndexChanged" 
        Autopostback="true" DataTextField="Name" DataValueField="ID" /> 

Gdy użytkownik dokona wyboru w tym DropDownList, w przypadku niektórych wyborów zostanie przekierowany na oddzielną stronę.

Po przekierowaniu użytkownik przechodzi do przycisku wstecz, powraca na tę stronę przy pomocy DropDownList.

Niestety, wybór, który przekierował ich na nową stronę, jest nadal zaznaczony.

Przykład

  • DDL zawiera A, B - Initial wybranej wartości: a
  • Użytkownik wybiera B - Postback przekierowuje je do innej strony
  • użytkownik kliknie "wstecz" w przeglądarce
  • Strona pokazuje teraz "B" jako wybraną, podczas gdy stan strony sugeruje, że nadal powinno być wybrane "A". Strona nigdy nie może być w stanie "B", ponieważ "B" jest oznaczony, aby przekierowywać użytkowników do tej drugiej strony.

Czy istnieje sposób zresetowania wyboru DropDownList do określonej wartości, gdy użytkownik powraca do strony za pomocą przycisku wstecz przeglądarki?

Uwaga

  • jestem zmuszony do korzystania z DDL tutaj, bo Common sprawa jest taka, że ​​przekierowanie nie występuje. Rozumiem, że generalnie nie jest to najlepsza opcja do łączenia użytkowników z innymi stronami.
  • Niestety, nie jestem w stanie wyłączyć przeglądarkę buforowania dla całej strony wykonania powodów
+0

Może skrypt po stronie klienta, aby zresetować wybory DDL po przyjeździe za pomocą przycisku Wstecz? –

Odpowiedz

4

Jeśli jest OK, aby usunąć poziomie strony przeglądarkę buforowania, można spróbować usunąć pamięć podręczną, tak że ponownie ładuje stronę po powrocie użytkownika. Dodaj to do ładowania strony:

Response.Expires = 0 
Response.Cache.SetNoStore() 
Response.AppendHeader("Pragma", "no-cache") 
+0

Och, nie zauważyłem, że nie można wyłączyć buforowania. Zignoruj ​​zatem. –

+0

Jaka jest różnica między tym a Response.Cache.SetCacheability (HttpCacheability.NoCache)? –

+0

Dzięki za poradę Paul, nie było jasne w moim wstępnym pytaniu dotyczącym buforowania na poziomie strony –

0

Jak sugeruje użyć JavaScript na stronie, aby ponownie ustawić zaznaczenie na liście rozwijanej.

0

Oto kod, który pracował dla mnie:

<script type="text/javascript"> 
    window.onload = function() { 
    var ControlValue = document.getElementById("<%= DropDownList.ClientID %>"); 
    if (ControlValue.value != origControlValue) { 
     ControlValue.value = origControlValue; 
    } 
    } 
    var origControlValue = document 
    .getElementById("<%= DropDownList.ClientID %>").value; 
</script>