2012-11-21 36 views
0

我在頁面加載填充我的下拉以這種方式(StringBuilder的是存在只是爲了證明被檢索正確的列表項)ASP下拉列表沒有得到應有的價值

下拉選擇的事件始終檢索的索引0,不管我從列表中選擇什麼項目,這導致我相信我填充dropdwonlist的方式有問題,並且所選值始終是與下拉菜單出現時列表中第一個項目關聯的值在頁面加載時,無論從下拉列表中選擇什麼項目。

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    'Dim sb As New StringBuilder() 
    Using ctx As New dbentities() 
     Try 
      Dim query = (From c In ctx.my_aspnet_users Select c.name, c.id).ToList() 

      ddlSiteUsers.DataSource = query 
      ddlSiteUsers.DataTextField = "name" 
      ddlSiteUsers.DataValueField = "id" 
      ddlSiteUsers.DataBind() 
      'For Each item As ListItem In ddlSiteUsers.Items 
      ' sb.Append(item) 
      ' sb.Append(",") 
      ' sb.Append(item.Value) 
      ' sb.Append(";" & vbCrLf) 
      'Next 
      'MsgBox(sb.ToString()) 
     Catch ex As Exception 
      MsgBox(ex.StackTrace.ToString()) 
     End Try 
    End Using 
End Sub 

回答

0

Page_Load()事件在頁面初始加載時以及回發頁面時觸發。

這意味着,在click/indexchanged事件觸發之前,當您提交表單時,它將重新運行Page_Load()中的代碼。

要停止這一點,你需要把if聲明在你的代碼,以便它只是填充的下拉列表中,當頁面最初加載(即在不回發)

例如

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
    'Dim sb As New StringBuilder() 
    Using ctx As New dbentities() 
     Try 
     Dim query = (From c In ctx.my_aspnet_users Select c.name, c.id).ToList() 

     ddlSiteUsers.DataSource = query 
     ddlSiteUsers.DataTextField = "name" 
     ddlSiteUsers.DataValueField = "id" 
     ddlSiteUsers.DataBind() 
     'For Each item As ListItem In ddlSiteUsers.Items 
     ' sb.Append(item) 
     ' sb.Append(",") 
     ' sb.Append(item.Value) 
     ' sb.Append(";" & vbCrLf) 
     'Next 
     'MsgBox(sb.ToString()) 
     Catch ex As Exception 
     MsgBox(ex.StackTrace.ToString()) 
     End Try 
    End Using 
    End If 
End Sub