尝试在 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的主要内容,如果未能解决你的问题,请参考以下文章