2012-11-21 32 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