ASP.Net DropDownList wybrana wartość


Mam wrażenie, że brakuje mi czegoś naprawdę oczywistego, nie jestem w stanie pobrać wybranej wartości mojej DropDownList; value zmienia nazwę pierwszej pozycji na liście. Ustawiłem właściwość DropListList

autopostback

w wartości

true
. Mam wybranydindexchangedEvent, który jest wklejony poniżej. Nie jest to na stronie głównej.
protected void ddlRestCity_SelectedIndexChanged(object sender, EventArgs e)
{
if (IsPostBack)
{
r_city = ddlRestCity.SelectedValue.ToString();
}
}

Oto kontrolka DropDownList:
<asp:DropDownList ID="ddlRestCity" runat="server" 
Width="100px" AutoPostBack="True"
onselectedindexchanged="ddlRestCity_SelectedIndexChanged">
</asp:DropDownList>

Z góry dziękuje za twoją pomoc!
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Moje nieoczekiwane przypuszczenie jest takie, że prawdopodobnie ponownie wypełniasz listę z tyłu postu, co powoduje zresetowanie wybranego indeksu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Gdzie jest twoje wywołanie
DataBind ()
? Czy sprawdzasz
! IsPostBack
przed zadzwonieniem? Na przykład:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
ddlRestCity.DataSource = ...;
ddlRestCity.DataBind();
}
}


Wyjaśnienie:

Jeśli nie zaznaczysz
! IsPostBack
przed
DataBind ()
, lista zostanie uzupełniona

przed

tego, jak
SelectedIndexChanged
zostanie uruchomiony (ponieważ
Page.Load
odpala

przed

zdarzenia podrzędne, takie jak
SelectedIndexChanged
). po wyzwoleniu
SelectedIndexChanged
Następnie „wybrany element” jest teraz pierwszym elementem na nowo zapełnionej liście.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Co to jest r_city?
Jeśli jest to pole tekstowe, musisz zrobić coś takiego jak
r_city.text = ...
Alternatywnie możesz rozważyć usunięcie swojego sprawdzenia opinii. Generalnie jest to najbardziej przydatne w przypadku page.onload i generalnie sprawdza się, czy
jeśli NIE jest postback
...

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się