2009-01-06 8 views
7

Mam dwie kontrole listy rozwijanej ASP.NET na stronie. Pierwszy oddzwania na serwer i otrzymuje tablicę, która jest zwracana do klienta i używana do zapełniania drugiej listy rozwijanej przez javascript. Jednak jeśli dokonam wyboru na drugiej (i nowo wypełnionej) liście rozwijanej, a następnie odświeżę stronę, wybór i zawartość drugiej listy rozwijanej zostaną utracone. Jest to problem, ponieważ muszę uzyskać wybraną wartość i zachować zawartość listy po odświeżeniu.ASP.NET - utrata wyboru listy rozwijanej wypełnionej za pośrednictwem javascript

Jak to naprawić? Przypuszczam, że to kwestia aktualizacji stanu oglądania w pewnym momencie przed odejściem wstecz?


Kontrolki, które zapełniam, to listy rozwijane ASP.NET. Oto javascript, którego używam do ich zapełnienia.

kod wykorzystywany jest następujący (lekko ścięte na zwięzłość):

kontrola ASP.NET Mam wypełniania:

< asp: DropDownList ID = "ddlStateCounty" runat = "server "OnSelectedIndexChanged =" ddlStateCounty_OnSelectedIndexChanged”AutoPostBack = "true"/ >

oddzwonienie kod, który uzyskuje przecinkami listę wartości rozdzielone: ​​

public void RaiseCallbackEvent(string eventArgument) 
    { 
    return "1, 2, 3"; 
} 

kodu JavaScript ludność:

function ReceiveServerData(retValue) 
{ 
    var statesArray = retValue.split(','); 
    var statesList = document.getElementById('{0}'); 

    if (statesArray.length > 0 && statesList != null) 
     { 
       for (var j = 0; j < statesArray.length; j++) 
      { 
        var newOption = document.createElement('OPTION'); 
         statesList.options.add(newOption); 
      newOption.value = statesArray[j].toString().trim(); 
        newOption.innerText = statesArray[j]; 
       } 
    } 
} 
+0

Czy możesz dodać swoją stronę aspx, kod javascript i codebehind (w 3 osobnych blokach kodu byłoby dobrze) :) –

Odpowiedz

1

Zgaduję, że "nie robisz rzeczy takimi asp.net".

Wydaje mi się prawdopodobne, że jeśli modyfikacje javascript nie są natywne asp.net, to elementy, które zapełniasz, nie są kontrolkami asp.net, więc tracisz je w poczcie zwrotnej. asp.net naprawdę wymaga ścisłego powiązania między swoim modelem a rzeczywistą stroną.

Może być jednak poza bazą - pomogłoby, gdyby można było opublikować kod. (JS i metoda codebehind)

edycja nowych informacji:

prawo - więc jesteś w zasadzie tworzenia ładunek doskonale normalnych elementów HTML przez JS sam opiera się na AJAXified ciąg powrotnej (?) , który w kodzie asp.net code ma nie ma pojęcia o jakimkolwiek numerze:. Nie jestem w 100% pewny, że to jest problem bez samodzielnego konfigurowania aplikacji testowej, ale brzmi to jak należy.

Sprawdzanie Żądania.Formy - jak sugerowali inni - będą najprostszym sposobem, aby to naprawić teraz, ale należy pamiętać, że asp.net staje się coraz bardziej bolesny, im dalej zbaczasz z robienia rzeczy tak, jak tego chcesz. Myślę, że warto zastanowić się, jak dodać nowe opcje z kodu.

+0

to zbyt wiele przypadków "asp.net" w jednym poście – annakata

+0

za dużo asp.net ?? czy to jest możliwe? ;) – Blounty

+0

asp.net za szkodliwe? : P – annakata

1

po prostu użyj kolekcji response.forms, aby uzyskać wybraną wartość.

+0

Dzięki! Jednak muszę również zachować wartości listy rozwijanej między stanowiskami. – Peanut

6

Masz rację, stwierdzając, że nie masz prawa do usługi ViewState, dlatego te wartości nie są wypełniane po przesłaniu danych z powrotem na serwer.

bym silnie zaleca się migrować do korzystania z Cascading Drop Down w ASP.NET AJAX sterowania Toolkit (posiada zarówno .NET 2.0 i .NET 3.5 wydań), jak robi to co jesteś po i to robi utrzymywać przez oddzwonienie.

Inną opcją będzie mieć zdarzenie onchange na rozwijanej liście, w której należy wypełnić ukryte pole, ponieważ zostanie ono przesłane do serwera, a wartość przesłania zostanie zachowana w obrębie delegowani dane, coś jak:

$addHandler('change', $get('dynamicDDL'), function() { $get('hiddenField').value = this.options[this.selectedIndex].value; }); 

dla demo użyłem MS AJAX krótko ręki do dodawania wydarzeń, etc. Więcej informacji na temat metod użyłem można znaleźć tutaj: http://msdn.microsoft.com/en-au/library/bb397536.aspx

3

Request.Form [Control.UniqueID] daje ci wybór Wartość ed.

Powiązane problemy