从数据库加载DropDownList,然后获取值

时间:2017-08-18 12:42:41

标签: asp.net vb.net sql-server-2016

我不确定ASP.NET是如何工作的,因为我还是很新的,来自PHP背景,其中大多数事情都是通过POST完成的。我在代码后面使用VB.NET。主要是因为这里使用的主程序是用VB.NET编写的,我希望在不编译库的情况下保持代码的可移植性。

我的问题如下。我在页面上有一个DropDownList。我用数据库中的数据填充它。这似乎工作正常。

我有一个按钮,可以将CLIENTCODE更改为DropDownBox中选择的任何内容。这不起作用。相反,索引总是-1。

网页代码

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPage.Master" CodeBehind="Admin.aspx.vb" Inherits="WOTC_CP.Admin" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="RightBody" runat="server">
   <% 
       Load_UserList_List()
%>
<h1 class="sub-header">Administration Toolbox</h1>
<p>If you are not an Administrator, please send us an alert and leave this page at once.</p>
<div class="row">
    <div class="form-group">
        <div class="col-md-4">
            <asp:Label ID="Label1" runat="server" Text="Label">Change my Clientcode;</asp:Label>
            <asp:DropDownList ID="cboClientList" class="form-control" runat="server" >

            </asp:DropDownList>
            <asp:Button ID="cmdChangeClientCode" class="btn btn-primary" runat="server" Text="Change"  />


        </div>
    </div>
</div>

代码背后

Public Sub Load_CLIENTCODE_List()
    If IsPostBack = False Then
        Using DB As New wotcDB
            Dim r = (From t In DB.client_main Order By t.CLIENTCODE Select t.CLIENTCODE).Distinct
            For Each Client In r
                Dim input As New ListItem
                input.Text = Client
                input.Value = Client
                cboClientList.Items.Add(input)
            Next
        End Using
    End If
End Sub

Private Sub cmdChangeClientCode_Click(sender As Object, e As EventArgs) Handles cmdChangeClientCode.Click
    Dim CLIENTCODE As String = CType(Session("CLIENTCODE"), String)
    Dim UserName As String = CType(Session("UserName"), String)
    Using DB As New wotcDB
        Dim u = (From t In DB.website_users Where t.UserName = UserName).FirstOrDefault
        If u IsNot Nothing Then
            Dim TempID As Integer = cboClientList.SelectedIndex
            Dim TempValue As String = cboClientList.SelectedValue
            u.CLIENTCODE = cboClientList.SelectedValue
            DB.SaveChanges()
        End If
    End Using
End Sub

我在堆栈上尝试了其他答案,但似乎没有任何效果。任何想法?

2 个答案:

答案 0 :(得分:0)

在asp.net中,下拉列表包含两个您想要设置的关键属性。 DataTextField =显示名称和DataValueField =要存储到DB的值。 话虽如此,你需要捕捉&#34; SelectedValue&#34;如果你想获得DataValueField。

答案 1 :(得分:0)

问题是我在加载DropDownList之前加载了填充DropDownList的脚本。所以它总是空的。解决方案是在Page_Load上加载列表。