OnSelectedIndexChanged在aspx页面不起作用



我的页面中有这个下拉列表

<asp:DropDownList ID="ddlselectTaxas" runat="server" AutoPostBack="True" CssClass="form-control" OnSelectedIndexChanged="ddlselectTaxas_SelectedIndexChanged"
EnableViewState="True" ViewStateMode="Enabled"></asp:DropDownList>

这是vb文件

中的函数
Public Sub ddlselectTaxas_SelectedIndexChanged(sender As Object, e As EventArgs)
        taxas.TryGetValue(ddlselectTaxas.SelectedItem.Text, valorTxt.Text)
        valorTxt.Text = valorTxt.Text.Substring(0, valorTxt.Text.Length - 2)
End Sub

当我在下拉列表中选择不同的值时,我想改变文本框(valorTxt)的值,但函数没有触发。我不知道为什么,我有零经验与VB和asp页面。谢谢你的帮助。提前谢谢。

编辑这是页面

的完整代码
Public Class Emitir
    Inherits System.Web.UI.Page
    Public taxas As New Dictionary(Of String, String)
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            CarregaValores()
            valorTxt.ReadOnly = True
        End If
    End Sub

    Private Sub CarregaValores()
        Dim dt As DataTable
        Dim objAcesso As New AcessoBD
        Dim consulta As String = "SELECT TE.COD_TAXA, TE.DESC_TAXA, TV.VL_TAXA FROM TAXAS_EXPEDIENTE TE JOIN TAXAS_EXPEDIENTE_VALOR TV ON TE.COD_TAXA = TV.COD_TAXA"
        dt = objAcesso.DataTable(consulta, CommandType.Text)
        For Each linha As DataRow In dt.Rows
            taxas.Add(linha.ItemArray(1), linha.ItemArray(2))
        Next
        valorTxt.Text = dt.Rows.Item(0).ItemArray(2)
        valorTxt.Text = valorTxt.Text.Substring(0, valorTxt.Text.Length - 2)
        ddlselectTaxas.DataTextField = "DESC_TAXA"
        ddlselectTaxas.DataValueField = "COD_TAXA"
        ddlselectTaxas.DataSource = dt
        ddlselectTaxas.DataBind()
    End Sub
    Protected Sub ddlselectTaxas_SelectedIndexChanged(sender As Object, e As EventArgs)
        taxas.TryGetValue(ddlselectTaxas.SelectedItem.Text, valorTxt.Text)
        valorTxt.Text = valorTxt.Text.Substring(0, valorTxt.Text.Length - 2)
    End Sub
End Class

你没有显示你的代码来加载下拉列表。

记住,你的页面加载代码会在每次返回时触发。

那么,如果在页面加载代码中,你加载下拉列表?您需要这样做:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        LoadData()
        LoadCal()
    End If
End Sub
Sub LoadData()
    Dim cmdSQL As New SqlCommand(
        "SELECT ID,(FirstName + ' ' + LastName) as EmpName 
        FROM Employee ORDER BY FirstName")
    lstEmployee.DataSource = MyRstP(cmdSQL)
    lstEmployee.DataBind()
End Sub
Function MyRstP(cmdSQL As SqlCommand) As DataTable
    Dim rstData As New DataTable
    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL
            cmdSQL.Connection = conn
            conn.Open()
            rstData.Load(cmdSQL.ExecuteReader)
        End Using
    End Using
    Return rstData
End Function
现在,在上面,我使用的是一个列表框,但它们的工作原理与下拉列表(组合框)相同。

但是,如果你不把数据的加载放在if NOT IsPostBack?

然后发生的事情是你选择一个下拉,并说点击一个按钮(或在你的情况下autopostback = true,然后页面加载火灾首先,然后你的代码运行!!

,如果您的代码重新加载下拉列表?那么你的选择就输了!!

所以,对于你创建的任何页面,总是,但总是在on-load中使用回发代码存根——这样你的控件数据加载只发生一次。因为如果你每次都重新加载,那么你的更改就会丢失。

嗯,我不确定发生了什么,但我重新制作了我的页面,它现在正在工作。有什么东西挡住了活动。谢谢你的帮助。

最新更新