Значение DropDownList SelectedIndex не обновляется при автопостбеке - PullRequest
5 голосов
/ 03 марта 2009

Похоже, этот вопрос был адресован здесь , но его решение не сработало для меня. Я создаю систему динамического выпадающего меню, которая заполняет вторичный выпадающий список результатами запроса на основе выбранного элемента в первом выпадающем списке.

Первый выпадающий список:

Dim db As New linqclassesDataContext
Dim categories = (From c In db.faq_cats)

NewFaqDropDownCategory.DataSource = categories
NewFaqDropDownCategory.DataTextField = "category"
NewFaqDropDownCategory.DataValueField = "category_id"
NewFaqDropDownCategory.DataBind()
Unset(categories)
Unset(db)

Второй выпадающий список:

Protected Sub NewFaqDropDownCategory_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim temp As Integer = CInt(Val(NewFaqDropDownCategory.SelectedIndex))
    MsgBox(theDrop.SelectedValue)
    Return

    'Dim db As New linqclassesDataContext
    'Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue)

    'NewFaqDropDownList.DataSource = faqs
    'NewFaqDropDownList.DataTextField = "question"
    'NewFaqDropDownList.DataValueField = "id"
    'NewFaqDropDownList.DataBind()
    'NewFaqLabel.Visible = True
    'NewFaqDropDownList.Visible = True
    'Unset(faqs)
    'Unset(db)
End Sub

Разметка для первого выпадающего списка ...

<asp:DropDownList ID="NewFaqDropDownCategory" AutoPostBack="true" runat="server" OnSelectedIndexChanged="NewFaqDropDownCategory_SelectedIndexChanged">
</asp:DropDownList>

И второй ...

<asp:DropDownList ID="NewFaqDropDownList" runat="server" Visible="false">
</asp:DropDownList>

Независимо от того, что я пробовал, я всегда получаю «1» (значение первого элемента во втором раскрывающемся списке). В посте, на который я ссылался ранее, говорилось, что это связано с AutoPostBack, а сервер еще не знал, что список обновлен.

Может кто-нибудь прояснить это для меня немного больше?

Ответы [ 3 ]

8 голосов
/ 03 марта 2009

Установите точку останова на строке, которая гласит: NewFaqDropDownCategory.DataBind () и одна в вашем обработчике событий (NewFaqDropDownCategory_SelectedIndexChanged). Я подозреваю, что привязка данных вызывается прямо перед тем, как сработало ваше событие NewFaqDropDownCategory_SelectedIndexChanged, в результате чего выбранное значение изменилось.

Если это так, вам нужно убедиться, что вы связываете данные только в том случае, если вы не находитесь в середине вашего автоответчика, или вместо использования NewFaqDropDownCategory.SelectedIndex в первой строке вашего обработчика событий, вы можете привести параметр sender к DropDownList и использовать его выбранное значение.

2 голосов
/ 20 апреля 2009

У меня была такая же проблема. Обнаружил, что забыл посмотреть, отправляю ли я обратно на страницу или нет, и привязал свой элемент управления DropDownList к событию Page_Load страницы. Я забыл использовать:

if (!IsPostBack)
{
   .... do databind ....
}
0 голосов
/ 03 марта 2009

Я думаю, что в вашем запросе LINQ есть ошибка для второго выпадающего списка

Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue)

Здесь вы сравниваете SelectedValue с категорией. Тем не менее, в первом комбинированном окне вы сказали, что DataValueField должен быть category_id. Попробуйте изменить f.category на f.category_id

...