【问题标题】:dropdown value changed on another dropdown selection in asp.net在 asp.net 中的另一个下拉选择中更改了下拉值
【发布时间】:2020-12-20 00:30:58
【问题描述】:

我有一个名为机构的下拉列表,另外两个下拉列表是职位和部门。 我想根据机构下拉列表的选择值更改职位和部门的下拉值。

例如:如果我在职位上选择不可用,那么它应该反映在其他两个下拉职位和部门上,如自动不可用,将为职位和部门选择。

注意:在我现有的项目中,我使用的是 asp.net。我很困惑如何做到这一点。我应该通过后端还是前端处理。

如果我也能获得代码示例的帮助,那就太好了。

【问题讨论】:

  • 你肯定会通过前端来完成的。后端可能取决于选项是否根据所选选项而改变。在这种情况下,它们可能必须从服务器中检索。显示您呈现的 HTML 并尝试使其正常工作。
  • 我没明白你的意思。请您进一步澄清或帮助我提供一些代码参考示例?
  • 您需要使用 JavaScript 向下拉元素添加行为。默认情况下,它们除了为您提供选择选项的控件之外什么都不做。如果您想要更多,那么您需要在下拉列表中侦听事件,并在选择新选项时执行某些操作。我的意思的另一件事与根据另一个下拉列表的选择更改其中一个下拉列表中的选项有关。但是,如果没有任何代码,很难为您提供帮助。通过将您的代码添加到问题中并使用 JavaScript 使其工作,向我们展示您的表单。至少尝试一下。
  • PostBack 上的简单 IF 语句就可以了,但您需要展示到目前为止您所做的尝试,然后如果您在某个领域遇到问题,请回来寻求帮助。

标签: javascript c# jquery asp.net webforms


【解决方案1】:

首先,您没有提及是否希望每个连续的组合都与前一个组合级联。

因此,您可以根据这样的一个机构选择来级联部门和职位:

或者你选择机构,然后是部门,这会给你职位。

例如:

但是,代码无关紧要。

容易吗?让我们假设第一种情况。 (这两种情况的代码都差不多。

我们假设: 放下 3 个下拉框。 自动回发 = 所有 3 个都为 true

对于每个组合框,我们将数据值字段设置为“ID” 和DataText字段(机构,部门或职位的文本描述列 对于 3 个组合框。

好的,到目前为止,所有的拖放操作。

现在,代码:

在页面加载时,我们加载第一个组合:

If IsPostBack = False Then
    Me.Instutions.DataSource = Myrst("select ID,Instution from Instutions")
    Me.Instutions.DataBind()
    Me.Instutions.Items.Insert(0, New ListItem(String.Empty, String.Empty))
    Me.Departments.DataSource = Nothing
    Me.Positions.DataSource = Nothing
End If

在机构组合的索引更改事件中?

如前所述,我将按照我的第一个数据库图放置/假设级联。

你有这个:

Protected Sub Instutions_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Instutions.SelectedIndexChanged

    Dim strSQL As String = "SELECT ID,Position from Positions WHERE Instutions_ID = " & Instutions.SelectedValue

    Me.Positions.DataSource = Myrst(strSQL)
    Me.Positions.DataBind()
    Me.Positions.Items.Insert(0, New ListItem(String.Empty, String.Empty))

    strSQL = "SELECT ID,Department from Departments WHERE Instutions_ID = " & Instutions.SelectedValue
    Me.Departments.DataSource = Myrst(strSQL)
    Me.Departments.DataBind()
    Me.Departments.Items.Insert(0, New ListItem(String.Empty, String.Empty))

End Sub

我还使用 Items.Insert 添加一个空白行,因为如果你不这样做,那么当你填充/绑定组合框时,它将选择第一行 - 你可能不想要这个(但是,嘿也许你这样做 - 如果是这样,请删除 .Items.Insert 以不添加该空行。

如前所述,如果您对所有 3 个进行级联?

然后简单地移出上面设置每个部门职位的最后一个代码。

代码总量其实差不多。

此外,作为一般规则,一遍又一遍地重写代码以将数据提取到表中是很痛苦的。因此,上面还使用了一个名为 MyRst 的辅助例程。它只是节省了您的手指,实际上是一个方便的例程,您可以使用它来填充网格、列表视图,在我们的例子中,用最少的代码填充下拉列表。所以我使用的例程是这样的:

Public Function Myrst(strSQL As String) As DataTable

    Dim mycon As New SqlConnection(My.Settings.Test4)
    Dim oReader As New SqlDataAdapter
    Dim rstData As New DataTable

    oReader.SelectCommand = New SqlCommand(strSQL, mycon)
    Try
        oReader.Fill(rstData)
        Return rstData
    Catch
        Debug.Print(Err.Description)
        Return Nothing
    End Try

End Function

所以,它不是很多代码。如前所述,上面的帮助程序对您的应用程序有很多用途。

所以,最终的结果是这样的:

您不需要任何客户端代码。但是,您必须为 3 的每个组合设置自动回发 = true(好吧,也许只是前 2 个)。如果不需要整页回帖?然后只需将上述 3 个控件放到更新面板中,该问题就消失了(您只有部分页面回发)。

所以,如果做得好,代码很少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多