Asp.net 回发后,dropdownlist不显示任何值

Asp.net 回发后,dropdownlist不显示任何值,asp.net,Asp.net,我已经为这个问题争论了几天了,如果有人能为我解释一下,我将不胜感激 我正在根据从另一个dorpdownlist中选择的内容填充dropdownlist。只要没有回发,我就会看到列表被正确填充,但是回发之后,我的dropdownlist是空的 起初,我试图手动设置ddl的Text属性,但它一直给我以下错误: System.ArgumentOutOfRangeException:…ddl有一个SelectedValue,该值无效,因为它不在列表中 然后我在某个地方读到,我需要设置DataValueF

我已经为这个问题争论了几天了,如果有人能为我解释一下,我将不胜感激

我正在根据从另一个dorpdownlist中选择的内容填充dropdownlist。只要没有回发,我就会看到列表被正确填充,但是回发之后,我的dropdownlist是空的

起初,我试图手动设置ddl的Text属性,但它一直给我以下错误:

System.ArgumentOutOfRangeException:…ddl有一个SelectedValue,该值无效,因为它不在列表中

然后我在某个地方读到,我需要设置DataValueField属性,所以我这样做了,从而消除了错误,但现在我在回发后看到了空dll。
ddl的ViewStateMode设置为Enabled

我所指的两个DDL在我的.aspx文件的Formview中定义为ddlCompanyBuyerNVListInsert和ddlCompanyNameListInsert(我仅列出插入模式)。 根据在ddlCompanyBuyerNVList中所做的选择,我正在填充ddlCompanyNameList

下面是页面加载的代码以及填充ddlCompanyNameList的函数

受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load

    If Not IsPostBack Then

        If NavHelper.User.UserName = "" Then
            Dim UserIP As String
            Dim UserLogin As String
            Dim UserEmail As String
            UserIP = HttpContext.Current.Request.UserHostAddress
            UserLogin = HttpContext.Current.Session("Username")
            UserEmail = HttpContext.Current.Session("Email")
            GetUserInfo()

            CurrentRFQ = Nothing
            If NavHelper.RFQ.ID = -1 Then
                formview_RFQ.ChangeMode(FormViewMode.Insert)
                tabpanelCustomerParts.Visible = False
                tabpanelDocuments.Visible = False
                tabpanelReviews.Visible = False
                tabpanelRFQReviewHistory.Visible = False
                listview_CustomerParts.Dispose()

            Else
                formview_RFQ.ChangeMode(FormViewMode.Edit)
                listview_ReviewContracts_Initial.EditIndex = 0
                SessionHelper.CurrentObject = TAA.Library.RFQ.GetObject(NavHelper.RFQ.ID)
                mRFQ = DirectCast(SessionHelper.CurrentObject, TAA.Library.RFQ)
                Dim UserdeptTotal As Long
                UserdeptTotal = HttpContext.Current.Session("DepartmentTotal")
                If formview_RFQ.FindControl("ddlCompanyBuyerNVList") IsNot Nothing Then
                    Dim ddl As DropDownList = DirectCast(formview_RFQ.FindControl("ddlCompanyBuyerNVList"), DropDownList)
                    FillCompanyNameDropDownList(ddl)
                End If
                tabpanelCustomerParts.Visible = True
                tabpanelDocuments.Visible = True
                tabpanelReviews.Visible = True
                tabpanelRFQReviewHistory.Visible = True
                If NavHelper.RFQ.Copy = True Then
                    SetModifyCopy()
                End If
            End If
        Else    'IsPostBack
            datasource_BuyerNVList.Dispose()
            datasource_RFQ.DataBind()
            datasource_RFQNote.DataBind()
            Dim ddl As DropDownList
            If (formview_RFQ.CurrentMode = FormViewMode.Insert) Then
                ddl = DirectCast(formview_RFQ.FindControl("ddlCompanyBuyerNVListInsert"), DropDownList)
            ElseIf formview_RFQ.FindControl("ddlCompanyBuyerNVList") IsNot Nothing Then
                ddl = DirectCast(formview_RFQ.FindControl("ddlCompanyBuyerNVList"), DropDownList)
            End If
            FillCompanyNameDropDownList(ddl)
        End If
    End If
End Sub
受保护的子FillCompanyNameDropDownList(DDLCompanyBuyerNameList作为DropDownList) 尝试 将cn用作新的SqlClient.SqlConnection(DB.RFQconnection) cn.Open()

受保护的子FillCompanyInfo字段(ddl作为DropDownList) 尝试 Dim Buyertle作为文本框 Dim BuyerMail As文本框 Dim buyerPhone作为文本框 Dim BuyerText作为文本框 Dim buyerMobile作为文本框 Dim buyerFax作为文本框 Dim CoAddr As文本框 文本框中的模糊CoCity Dim CoState作为文本框 Dim CoZip作为文本框

        If (formview_RFQ.CurrentMode = FormViewMode.Insert) Then
            buyerTitle = DirectCast(formview_RFQ.FindControl("txtBuyerTitleInsert"), TextBox)
            buyerEmail = DirectCast(formview_RFQ.FindControl("txtBuyerEmailInsert"), TextBox)
            buyerPhone = DirectCast(formview_RFQ.FindControl("txtBuyerPhoneNumberInsert"), TextBox)
            buyerExt = DirectCast(formview_RFQ.FindControl("txtExtInsert"), TextBox)
            buyerMobile = DirectCast(formview_RFQ.FindControl("txtBuyerMobileNumberInsert"), TextBox)
            buyerFax = DirectCast(formview_RFQ.FindControl("txtBuyerFaxNumberInsert"), TextBox)
            CoAddr = DirectCast(formview_RFQ.FindControl("txtCompanyAddressInsert"), TextBox)
            CoCity = DirectCast(formview_RFQ.FindControl("txtCompanyCityInsert"), TextBox)
            CoState = DirectCast(formview_RFQ.FindControl("txtCompanyStateCodeInsert"), TextBox)
            CoZip = DirectCast(formview_RFQ.FindControl("txtCompanyZipCodeInsert"), TextBox)
        Else
            buyerTitle = DirectCast(formview_RFQ.FindControl("txtBuyerTitle"), TextBox)
            buyerEmail = DirectCast(formview_RFQ.FindControl("txtBuyerEmail"), TextBox)
            buyerPhone = DirectCast(formview_RFQ.FindControl("txtBuyerPhoneNumber"), TextBox)
            buyerExt = DirectCast(formview_RFQ.FindControl("txtExt"), TextBox)
            buyerMobile = DirectCast(formview_RFQ.FindControl("txtBuyerMobileNumber"), TextBox)
            buyerFax = DirectCast(formview_RFQ.FindControl("txtBuyerFaxNumber"), TextBox)
            CoAddr = DirectCast(formview_RFQ.FindControl("txtCompanyAddress"), TextBox)
            CoCity = DirectCast(formview_RFQ.FindControl("txtCompanyCity"), TextBox)
            CoState = DirectCast(formview_RFQ.FindControl("txtCompanyStateCode"), TextBox)
            CoZip = DirectCast(formview_RFQ.FindControl("txtCompanyZipCode"), TextBox)
        End If

        Using cn As New SqlClient.SqlConnection(DB.RFQconnection)
            cn.Open()
            Using cm As SqlClient.SqlCommand = cn.CreateCommand
                cm.CommandType = CommandType.StoredProcedure
                cm.CommandText = "GetBuyerCompanyInfo"
                cm.Parameters.AddWithValue("@companyBuyerId", (ddl.SelectedValue))
                Using r As New SCF.Data.SafeDataReader(cm.ExecuteReader)
                    ' populate company information fields in CurrentRFQ
                    While r.Read
                        CurrentRFQ.CompanyID = SCF.Data.SafeData.SafeString(r(0))
                        CurrentRFQ.CompanyBuyerId = SCF.Data.SafeData.SafeString(r(7))
                        ddl.DataValueField = SCF.Data.SafeData.SafeString(r(1))
                        CoAddr.Text = SCF.Data.SafeData.SafeString(r(2))
                        CoCity.Text = SCF.Data.SafeData.SafeString(r(4))
                        CoState.Text = SCF.Data.SafeData.SafeString(r(5))
                        CoZip.Text = SCF.Data.SafeData.SafeString(r(6))
                        buyerTitle.Text = SCF.Data.SafeData.SafeString(r(9))
                        buyerEmail.Text = SCF.Data.SafeData.SafeString(r(10))
                        buyerPhone.Text = SCF.Data.SafeData.SafeString(r(11))
                        buyerExt.Text = SCF.Data.SafeData.SafeString(r(12))
                        buyerMobile.Text = SCF.Data.SafeData.SafeString(r(13))
                        buyerFax.Text = SCF.Data.SafeData.SafeString(r(14))
                    End While
                End Using
                cm.Dispose()
                cn.Close()
            End Using
        End Using

    Catch ex As System.Exception
        SetErrorPanel("An error occured during FillCompanyInfoFields.")
        Dim err As New HealthMonitoringCustomEvents.ErrorEvent("An error occured during FillCompanyInfoFields", Me, ex)
        err.Raise()
    End Try
End Sub
下面是如何在.aspx文件中定义这两个DDL

<td> <asp:DropDownList ID="ddlCompanyBuyerNVListInsert" runat="server"
 AppendDataBoundItems="true" AutoPostBack="true" CssClass="Input" 
 DataSourceID="datasource_BuyerNVlist" DataTextField="Key"  DataValueField="Value" 
 OnSelectedIndexChanged="ddlCompanyBuyerNVListInsert_SelectedIndexChanged"
 ViewStateMode="Enabled" Width="205px"> <asp:ListItem Selected="True" Text="Select
 Buyer" Value="0" /> </asp:DropDownList> </td> <td></td> <td class="style4"> Company:
 </td> <td>
<asp:DropDownList ID="ddlCompanyNameListInsert" runat="server"
AppendDataBoundItems="True" AutoPostBack="True" CssClass="Input"onselectedindexchanged="ddlCompanyNameListInsert_SelectedIndexChanged"
ViewStateMode="Enabled" Enabled="False"> </asp:DropDownList> </td>
公司:

非常感谢您的回复。

请与我们分享您的代码,以便我们找出问题所在。您是否忘记初始化下拉列表?如果(!Page.IsPostBack){//Initialize your dropdown}非常感谢您的响应。我注意到在运行时填充的Formview中的文本框的内容在回发后也会消失。我将ddl移到Formview之外,现在它在回发后保留其内容。Formview中在运行时填充的控件的具体特性是什么?如何使它们在回发后保留其值?
<td> <asp:DropDownList ID="ddlCompanyBuyerNVListInsert" runat="server"
 AppendDataBoundItems="true" AutoPostBack="true" CssClass="Input" 
 DataSourceID="datasource_BuyerNVlist" DataTextField="Key"  DataValueField="Value" 
 OnSelectedIndexChanged="ddlCompanyBuyerNVListInsert_SelectedIndexChanged"
 ViewStateMode="Enabled" Width="205px"> <asp:ListItem Selected="True" Text="Select
 Buyer" Value="0" /> </asp:DropDownList> </td> <td></td> <td class="style4"> Company:
 </td> <td>
<asp:DropDownList ID="ddlCompanyNameListInsert" runat="server"
AppendDataBoundItems="True" AutoPostBack="True" CssClass="Input"onselectedindexchanged="ddlCompanyNameListInsert_SelectedIndexChanged"
ViewStateMode="Enabled" Enabled="False"> </asp:DropDownList> </td>