Список привязки данных выбранный индекс всегда -1

У меня есть простая форма загрузки. Вот мой код:

<form id="Form1" method="post" enctype="multipart/form-data" runat="server"
    <asp:label id="lblMsg" runat="server" CssClass="msg" />
    <span class="msg">Select Gallery:</span>
    <asp:listbox id="gallerySelect" runat="server" Rows="1" DataTextField="galleryName" DataValueField="galleryID" />
    <span class="msg">File:</span><input type="file" id="galleryLogo" name="galleryLogo" runat="server" />
    <input type="button" value="Upload" OnServerClick="Upload" runat="server"><br />
</form>

Предполагается, что вы сможете выбрать, для какой галереи вы хотите загрузить изображение логотипа, а затем выбрать файл изображения и нажать кнопку загрузки. Вот мой загрузочный саб:

Sub Upload(Source As Object, e As EventArgs)
    If Not (galleryLogo.PostedFile Is Nothing) Then
        Dim intFileNameLength as Integer
        Dim strFileNamePath as String
        Dim strFileNameOnly as String
        'Logic to find the FileName (excluding the path)
        strFileNamePath = galleryLogo.PostedFile.FileName
        intFileNameLength = Instr(1, StrReverse(strFileNamePath), "\")
        strFileNameOnly = Mid(strFileNamePath, (Len(strFileNamePath)-intFileNameLength)+2)
        galleryLogo.PostedFile.SaveAs("c:\inetpub\wwwroot\galleries\" & strFileNameOnly)

        Dim cmd As SqlCommand
        Cache("sqlconn") = New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
        Cache("sqlconn").Open()
        Dim query = "update gallery set logo = '" & strFileNameOnly & "' where gallery_id = " & gallerySelect.SelectedItem.Value.ToString()
        cmd = New SqlCommand(query, Cache("sqlconn"))
        cmd.ExecuteNonQuery()   
        tell the user something positive
        lblMsg.Text = "File Uploaded Successfully<br />"
        End If
End Sub

Моя проблема заключается в том, что в списке привязанных данных gallerySelect selectedIndex всегда равен -1. Я знаю его, потому что он связан с данными, но я не знаю, что мне нужно сделать, чтобы получить значение. Любая помощь будет оценена.

РЕДАКТИРОВАТЬ:

Вот мой обязательный код, если вам это нужно:

Dim galleryCmdSelect2 As SqlCommand
Dim galleryData2 As SqlDataReader
galleryCmdSelect2 = New SqlCommand("select gallery_name as galleryName, gallery_id as galleryID from galleries order by gallery_name", Cache("sqlconn"))
galleryData2 = galleryCmdSelect2.ExecuteReader()
gallerySelect.DataSource = galleryData2
gallerySelect.DataBind()
galleryData2.Close()

1 ответ

Решение

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

If Not (IsPostBack) Then
 //DataBind here
End If
Другие вопросы по тегам