无论我选择啥,我的 Web 表单都只插入下拉列表中的第一项

Posted

技术标签:

【中文标题】无论我选择啥,我的 Web 表单都只插入下拉列表中的第一项【英文标题】:My Web Form inserts only the first item in dropdown no matter what I choose无论我选择什么,我的 Web 表单都只插入下拉列表中的第一项 【发布时间】:2011-10-12 23:43:49 【问题描述】:

我有两个关系表:包含 3 种用户角色(经理、开发人员、普通用户)的 Profiles 表和包含 Access 2010 数据库中用户及其角色 ID(Profile_ID 字段)的信息的 Users 表.

我在 ASP.NET 中创建了一个 Web 表单,它应该简单地注册用户、询问他们的姓名、在下拉列表中选择他们的角色并将其全部插入 Access 数据库中。该代码会为每个注册用户填充一个网格视图,并为页面加载时的每个角色填充一个下拉列表

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Start connection
    Dim cs As String = ConfigurationManager.ConnectionStrings("Access 2010").ConnectionString
    Dim cn As New OleDbConnection(cs)
    cn.Open()

    'Retrieve User Data
    Dim cmd As New OleDbCommand
    With cmd
        .Connection = cn
        .CommandText = "SELECT * FROM Users"
        .CommandType = CommandType.Text
    End With
    Dim ddlValues As OleDbDataReader = cmd.ExecuteReader()

    'Populate User Grid View
    grdUsers.DataSource = ddlValues
    grdUsers.DataBind()
    ddlValues.Close()

    'Retrieve Profile data
    With cmd
        .Connection = cn
        .CommandText = "SELECT * FROM Profiles"
        .CommandType = CommandType.Text
    End With
    ddlValues = cmd.ExecuteReader()


    'Populate Dropdown Profiles
    ddRoles.DataSource = ddlValues
    ddRoles.DataTextField = "Nome"
    ddRoles.DataValueField = "ID"
    ddRoles.DataBind()

    'Close connections
    ddlValues.Close()
    cmd.Dispose()
    cn.Dispose()
End Sub

最近,一旦单击按钮,它就会插入数据库:

Protected Sub btnRegister_Click(sender As Object, e As EventArgs) Handles btnRegister.Click
    Dim cs As String = ConfigurationManager.ConnectionStrings("Access 2010").ConnectionString
    Dim cn As New OleDbConnection(cs)
    Dim cmd As New OleDbCommand
    With cmd
        .CommandText = "INSERT INTO Users (nome, Profile_ID) VALUES ('" & Me.txtNome.Text & "', " & Me.ddRoles.SelectedValue & ")"
        .Connection = cn
        .Connection.Open()
        .ExecuteNonQuery()
        .Connection.Close()
        .Dispose()
    End With
    cn.Dispose()
    Response.Redirect(Request.Url.AbsoluteUri)
End Sub

代码运行没有问题,但无论我选择下拉列表中的哪个项目,它都将始终创建为普通用户(这是该表中的第一条记录)。虽然我检查了生成的html

<select name="ctl00$MainContent$ddRoles" id="MainContent_ddRoles">
<option value="5">Common User</option>
<option value="6">Developer</option>
<option value="7">Manager</option>

看起来不错,但我的数据库中只有 ID 号为 5 的记录。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

通过绑定对 Page_Load 的每次调用,您将删除 DropDown 列表中的选择。您只需要在 !IsPostback 时进行绑定。

【讨论】:

在 Page_Load 中调用 Sub If Not IsPostBack Then BindDropDowns End If

以上是关于无论我选择啥,我的 Web 表单都只插入下拉列表中的第一项的主要内容,如果未能解决你的问题,请参考以下文章

从Yii上的多个选择下拉列表中获取值以插入数据库

.NET Web 表单下拉列表和日期时间选择器需要 HTML 5 验证

使用 Web API 和 AngularJS 保存表单数据(选择列表)

如何从下拉列表中选择多个项目并将多个值插入 MYSQL

如何将选择标记选项值附加到Web服务角度4

在下拉列表中选择特定值时如何在联系表单 7 中启用字段