尝试在 page_load 上显示 2 个下拉列表中的 1 个将不起作用。 ASP.net

Posted

技术标签:

【中文标题】尝试在 page_load 上显示 2 个下拉列表中的 1 个将不起作用。 ASP.net【英文标题】:Trying to show 1 of 2 Dropdownlists on page_load wont work. ASP.net 【发布时间】:2022-01-14 11:46:49 【问题描述】:

当页面基于会话变量加载时,我试图在页面上显示 2 个下拉列表中的 1 个。我已经尝试完全删除 If 语句,但仍然无法通过使用 Control.Visible = True(或 False)来显示或隐藏列表。我究竟做错了什么? Page_Load sub中的控件属性不能更改吗?

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

        If Session("Role") = 1 Then
            DropDownList1.Visible = True
            DropDownList2.Visible = False
        Else
            DropDownList2.Visible = True
            DropDownList1.Visible = False
        End If

    End Sub
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Utility.aspx.vb" Inherits="Utility.Utility" MaintainScrollPositionOnPostback="true"%>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Title</title>
</head>
<hr />
<div style="height: 16px">
</div>
<body id="PageBody" runat="server">
    <form id="form1" runat="server">
        <div style="height: 318px">
                <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" Height="18px" Width="339px" Font-Names="Calibri" Font-Size="Medium">
                    <asp:ListItem Selected="True"></asp:ListItem>
                    <asp:ListItem Value="1">Choice</asp:ListItem>
                </asp:DropDownList>
                <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" Height="18px" Width="339px" Font-Names="Calibri" Font-Size="Medium">
                    <asp:ListItem Selected="True"></asp:ListItem>
                    <asp:ListItem Value="2">Choice</asp:ListItem>
                </asp:DropDownList>
        </div>
    </form>
</body>
</html>

【问题讨论】:

我已经很久没有使用 ASP.NET 了,但是您尝试过 Page_Init 事件吗? like this?: Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)Handles Me.Init If Session("Role") = 1 Then DropDownList1.Visible = True DropDownList2.Visible = False Else DropDownList2.Visible = True DropDownList1.Visible = False End If End Sub 是的,这行得通吗? 很遗憾,没有。 控件属性在页面加载时绝对可以改变。你也可以发布 .aspx 代码吗? 【参考方案1】:

这对我有用。问题是在这两种情况下你只能看到一个下拉菜单,所以运行代码看起来总是一样的结果。

我的意思是,你的妆容,然后是这段代码:

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


    Dim intTest As Integer = 2

    If intTest = 1 Then
        DropDownList1.Visible = True
        DropDownList2.Visible = False
    Else
        DropDownList2.Visible = True
        DropDownList1.Visible = False
    End If


End Sub

我们看到了:

好的,现在我们试试这段代码:

    Dim intTest As Integer = 1

    If intTest = 1 Then
        DropDownList1.Visible = True
        DropDownList2.Visible = False
    Else
        DropDownList2.Visible = True
        DropDownList1.Visible = False
    End If

所以,现在我们用 1 试试这个,我们看到了:

所以,它正在工作,但结果看起来 100% 相同,因为在这两种情况下,我们都会看到一个下拉菜单。那么,您将如何判断这是否真的有效?

也许我们应该在两个框中添加一些文本和标记,然后我们就可以分辨出区别。因此,您的代码可以正常工作 - 但两种情况下的屏幕看起来 100% 相同。

让我们添加一些额外的标记,这样我们就可以看到不同之处。这么说:

      <div style="height: 318px">

            <div id="drop1" runat="server">
                <h2>This is drop down 1</h2>
                <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" Height="18px" Width="339px" Font-Names="Calibri" Font-Size="Medium">
                    <asp:ListItem Selected="True"></asp:ListItem>
                    <asp:ListItem Value="1">Choice</asp:ListItem>
                </asp:DropDownList>
           </div>

            <div id="drop2" runat="server">
                <h2> This is drop down 2</h2>
                <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" Height="18px" Width="339px" Font-Names="Calibri" Font-Size="Medium">
                    <asp:ListItem Selected="True"></asp:ListItem>
                    <asp:ListItem Value="2">Choice</asp:ListItem>
                </asp:DropDownList>
            </div>
     </div>

现在,对于 intTest = 1,我们看到:

对于 intTest = 2,我们看到:

我给“div”一个“id”和runat = server,所以我们可以这样做:

    Dim intTest As Integer = 1

    If intTest = 1 Then
        drop1.Visible = True
        drop2.Visible = False
    Else
        drop2.Visible = True
        drop1.Visible = False
    End If

我们会看到这个:

所以,我认为您的代码可以正常工作,但使用您的示例标记,您永远无法区分,因为在这两种情况下,您都会显示一个下拉菜单,在两种情况下看起来 100% 相同!

【讨论】:

以上是关于尝试在 page_load 上显示 2 个下拉列表中的 1 个将不起作用。 ASP.net的主要内容,如果未能解决你的问题,请参考以下文章

同时打开共享相同指令的2个下拉列表

Telerik RadEditor没有获取当前内容

创建相互依赖的下拉列表

如何使用zend框架2在更改下拉值时在输入字段内显示值

如何使用Javascript根据先前的下拉值显示第二个下拉列表

MFC 组合框下拉/下拉列表:仅显示一项