【问题标题】:Dropdown Conditional ListItem ASP VB下拉条件 ListItem ASP VB
【发布时间】:2020-04-21 06:28:28
【问题描述】:

所以我有一个我正在处理的 ASP 页面,在这个页面上有一个下拉列表和一个按钮(除其他外,但这些很重要)下拉列表选择商店的位置,并且此页面上的按钮,它会弹出一个弹出窗口供用户执行操作。在此弹出页面上有一个下拉菜单,其中包含 4 个选项:“信息亭、警报 1、警报 2 和警报 3”。不过,并非所有商店都有售货亭。因此,如果商店没有信息亭,我需要找到一种方法让“信息亭”不显示为下拉列表项。我知道如何获取代码以检查商店是否有售货亭。我只是不知道如何将下拉列表更改为不包含“kiosk”项目。这是我在 ASP 代码中所做的事情吗?还是代码隐藏(VB.Net)的page_load?或者这是javascript?请原谅,但我对 ASP 很陌生,这是我的第一个项目。非常感谢你们!

下拉列表的 ASP

 <asp:DropDownList ID="stateDropDownList" AutoPostBack="true" style="align-content:center; margin-left:200px" width="100px"  runat="server">
                <asp:ListItem Selected="True" disabled="disabled" Value=""> Email Lists </asp:ListItem>
                <asp:ListItem Value="kiosk"> Kiosk </asp:ListItem>
                <asp:ListItem Value="alert1"> Alert 1 </asp:ListItem>
                <asp:ListItem Value="alert2"> Alert 2 </asp:ListItem>
                <asp:ListItem Value="alert3"> Alert 3 </asp:ListItem>
            </asp:DropDownList>

【问题讨论】:

  • 您有几个不同的选择。您可以动态地创建 DropDownList,因此如果您知道 Kiosk 是一个选项,那么可以在代码隐藏中使用这种方式,然后在创建 DropDownList 时添加它,或者您不添加它。另一种方法是从 DropDownList 中删除 ListItem。 stateDropDownList.Items.RemoveAt(0) 之类的东西或 Kiosk 的任何索引。
  • 谢谢!我肯定会选择 RemoveAt 之一,因为列表已经全部设置好。感谢您的帮助!

标签: asp.net vb.net drop-down-menu


【解决方案1】:

这里有几个简单的例子来说明如何在 Page_Load 上隐藏 ListItem

HTML

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="_testPW22.aspx.vb" Inherits="_testPW22" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>

           <asp:DropDownList ID="stateDropDownList" AutoPostBack="true" style="align-content:center; margin-left:200px" width="100px"  runat="server">
                <asp:ListItem Selected="True" disabled="disabled" Value=""> Email Lists </asp:ListItem>
                <asp:ListItem Value="kiosk"> Kiosk </asp:ListItem>
                <asp:ListItem Value="alert1"> Alert 1 </asp:ListItem>
                <asp:ListItem Value="alert2"> Alert 2 </asp:ListItem>
                <asp:ListItem Value="alert3"> Alert 3 </asp:ListItem>
            </asp:DropDownList>

        </div>
    </form>
</body>
</html>

代码隐藏

Imports System.Linq

Partial Class _testPW22
    Inherits System.Web.UI.Page

    Private Class Store
        Public Property HasKiosk As Boolean = False
    End Class

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

        ' Load up your Store object, or whatever object it is you are using to determine if it has a Kiosk
        Dim store As New Store()

        If Not store.HasKiosk Then

            ' Option 1 if you know the index
            stateDropDownList.Items.RemoveAt(1)

            ' Opton 2 - you need to count down to 0 in order to remove from the collection you are iterating through
            For i As Integer = stateDropDownList.Items.Count - 1 To 0 Step -1
                If String.Equals(stateDropDownList.Items(i).Value, "Kiosk", StringComparison.InvariantCultureIgnoreCase) Then
                    stateDropDownList.Items.RemoveAt(i)
                End If
            Next

            ' Option 3 - fancy LINQ
            ' Make sure list item exists first, and then remove it
            If stateDropDownList.Items.Cast(Of ListItem)().Any(Function(r) String.Equals(r.Value, "Kiosk", StringComparison.InvariantCultureIgnoreCase)) Then
                stateDropDownList.Items.Remove(stateDropDownList.Items.Cast(Of ListItem)().FirstOrDefault(Function(r) String.Equals(r.Value, "Kiosk", StringComparison.InvariantCultureIgnoreCase)))
            End If


        End If



    End Sub

End Class

然后,如果您想动态执行此操作,则可以使用此示例。我在添加动态控件时使用 PlaceHolders。有几种不同的方法可以添加下面引用的 ListItem。

<asp:PlaceHolder ID="DropDownListPlaceHolder" runat="server" />

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

        ' Load up your Store object, or whatever object it is you are using to determine if it has a Kiosk
        Dim store As New Store()

        Dim ddl As New DropDownList()
        ddl.ID = "TestID"
        ddl.AutoPostBack = True
        ddl.Style.Add("align-content", "center")
        ddl.Width = New Unit(100)

        Dim li As New ListItem("EmaiL Lists", String.Empty)
        li.Selected = True
        li.Attributes.Add("disabled", "disabled")
        ddl.Items.Insert(0, li)

        ddl.Items.Insert(1, New ListItem("Alert 1", "1"))
        ddl.Items.Add(New ListItem("Alert 2", "2"))

        If store.HasKiosk Then
            ddl.Items.Add(New ListItem("Kiosk", "2"))
        End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多