为何 ASP.NET 的 ListBox 控件的 Enabled 属性不起作用?

microblue 2012-03-24 02:16:08
我在 ASP.NET 程序中使用 ListBox 控件,但是 Enabled 属性不起作用。示例代码如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestForm.aspx.cs" Inherits="WebAppTester.TestForm" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>测试页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="lstTest" Rows="16" runat="server" />
</div>
</form>
</body>
</html>


using System;
using System.Web.UI;

namespace WebAppTester
{
public partial class TestForm : Page
{
protected void Page_Load(object sender, EventArgs e)
{
lstTest.DataSource = Enum.GetNames(typeof(ConsoleColor));
lstTest.SelectedIndex = 4;
lstTest.DataBind();
lstTest.Enabled = false;
}
}
}

在上述代码中,我把 ListBox 控件的 Enabled 属设为 false,用于禁用该控件,不让用户选择该 ListBox 中的项目。
但是这没有起到作用,该 ListBox 还是可以进行选择。
请问这是怎么回事?应该如何解决?
谢谢!
...全文
515 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaosima2017 2012-03-24
  • 打赏
  • 举报
回复
请你多试几遍,不行设置透明度,或隐藏
呆子罗 2012-03-24
  • 打赏
  • 举报
回复
不用贴那么多代码,那么多繁重的东西。

完全能禁用!!!
彻底一点,清除你的浏览记录、缓存,清理解决方案、重新生成解决方案,运行页面!
microblue 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 chinajiyong 的回复:]
CSS是没办法办到的
[/Quote]
真的没办法吗?
将 ListBox 的 Enabled 属性设置为 false,从语义上说就是不让用户进行选择,microsoft 既然在 ASP.NET 4 中改用 class 来实现这个功能,总有他的道理吧。难道非要在 <system.web> 中使用 <pages controlRenderingCompatibilityVersion="3.5" /> 退回到 ASP.NET 3.5 模式?
EnForGrass 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 microblue 的回复:]

我新建了以下 CSS 文件:
CSS code

.aspNetDisabled
{
color: Red;
background-color: Aqua;
}


然后在 TestForm.aspx 文件的 <head> 节中引用该 CSS 文件:
HTML code

<head runat="server">
<title>测试页</title>
<link hr……
[/Quote]
CSS是没办法办到的,
microblue 2012-03-24
  • 打赏
  • 举报
回复
我新建了以下 CSS 文件:

.aspNetDisabled
{
color: Red;
background-color: Aqua;
}

然后在 TestForm.aspx 文件的 <head> 节中引用该 CSS 文件:

<head runat="server">
<title>测试页</title>
<link href="Main.css" rel="stylesheet" type="text/css" />
</head>

这个 lstTest.Enabled = false 的确按照 CSS 文件中指示的改变了前景景色和背景颜色。
但是如何使用 CSS 文件禁止用户进行选择呢?
microblue 2012-03-24
  • 打赏
  • 举报
回复
以下 ASP.NET 4 代码:
<asp:Button ID="btnSubmit" Enabled="false" Text="提交" runat="server" />

生成的 HTML 代码如下所示:
<input type="submit" name="btnSubmit" value="提交" id="btnSubmit" disabled="disabled" class="aspNetDisabled" />

就是说,<asp:Button> 同时设置了 disabled 和 class 属性。
不知道为什么 <asp:ListBox> 只设置 class 属性。
porschev 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 microblue 的回复:]

Stackoverflow 网站上有一篇相关的帖子:
ASP.NET C# ListBox server control will not disable
[/Quote]

那你设置一下看看。。。没有4.0的环境。。。帮你测不了。。

这个控件基本没有用过。。。这种样子都是用ul li加上CSS、js来完成
全局变量 2012-03-24
  • 打赏
  • 举报
回复
老外的意思是说 <system.web><pages controlRenderingCompatibilityVersion="3.5"> 改成3.5

你有两种选择。
不用控件生成。多选菜单用<asp:Literal 自己拼装 HTML

按老外说的用3.5
microblue 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yes16ws 的回复:]

class="aspNetDisabled"
没看到你引用任何CSS。
lstTest.Enabled = false; 的作用也是在select 上加 disabled="disabled"

真没看出你的代码哪出问题了!
重新编译项目试试。
[/Quote]
这是 ASP.NET 4 自动生成的代码,我做的仅是: lstTest.Enabled = false 。
请参阅 10 楼的 Stackoverflow 网站的帖子,老外也有同样的问题。
microblue 2012-03-24
  • 打赏
  • 举报
回复
Stackoverflow 网站上有一篇相关的帖子:
ASP.NET C# ListBox server control will not disable
全局变量 2012-03-24
  • 打赏
  • 举报
回复
class="aspNetDisabled"
没看到你引用任何CSS。
lstTest.Enabled = false; 的作用也是在select 上加 disabled="disabled"

真没看出你的代码哪出问题了!
重新编译项目试试。
EnForGrass 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 microblue 的回复:]

试了您提供了 HTML 代码示例,会起作用。
我查看了一下我的示例的页面源代码,如下所示:
HTML code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http……
[/Quote]

我的页面源代码


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
无标题页
</title></head>
<body>
<form name="form1" method="post" action="WebForm8.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTc4ODEwNzcyOQ9kFgICAw9kFgICAQ8QDxYGHg5EYXRhVmFsdWVGaWVsZAUIQ29sdW1uSUQeC18hRGF0YUJvdW5kZx4HRW5hYmxlZGhkEBUFBE5JS0UGTGlOaW5nBkpvcmRhbgVLYXBwYQRBbnRhFQUETklLRQZMaU5pbmcGSm9yZGFuBUthcHBhBEFudGEUKwMFZ2dnZ2cWAQIEZGSSmDjOqHuTRyQ0aXYlq3pubiSHyQ==" />
</div>

<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBgLj5/SACgLwxduiBALp8/MxAp6qrsYNAqPeqtoHAtCDgdsOg6lPIygyST8TsdjXD8jluXehhIU=" />
</div>
<div>
<select size="16" name="lstTest" id="lstTest" disabled="disabled">
<option value="NIKE">NIKE</option>
<option value="LiNing">LiNing</option>
<option value="Jordan">Jordan</option>
<option value="Kappa">Kappa</option>
<option selected="selected" value="Anta">Anta</option>

</select>
</div>
</form>
</body>
</html>
EnForGrass 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 microblue 的回复:]
我在 ASP.NET 程序中使用 ListBox 控件,但是 Enabled 属性不起作用。示例代码如下所示:
HTML code

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestForm.aspx.cs" Inherits="WebAppTester.TestForm" %>

<!DOCTYPE html PUB……
[/Quote]
应该不会出现这种情况啊,我试了行啊,你建个页面重新试一试啊
前台

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm8.aspx.cs" Inherits="WebApplication1.WebForm8" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="lstTest" Rows="16" runat="server" />
</div>
</form>
</body>
</html>

页面后台代码

protected void Page_Load(object sender, EventArgs e)
{
User user = new User();
user.Username = "James";
user.PassWord = "123";
DataTable dt1 = new DataTable();
dt1.Columns.Add("ColumnID", typeof(string));

DataRow dr1 = dt1.NewRow();
dr1["ColumnID"] = "NIKE";

DataRow dr2 = dt1.NewRow();
dr2["ColumnID"] = "LiNing";

DataRow dr3 = dt1.NewRow();
dr3["ColumnID"] = "Jordan";

DataRow dr4 = dt1.NewRow();
dr4["ColumnID"] = "Kappa";

DataRow dr5 = dt1.NewRow();
dr5["ColumnID"] = "Anta";

dt1.Rows.Add(dr1);
dt1.Rows.Add(dr2);
dt1.Rows.Add(dr3);
dt1.Rows.Add(dr4);
dt1.Rows.Add(dr5);
lstTest.DataSource = dt1.DefaultView;
lstTest.DataValueField = "ColumnID";
lstTest.SelectedIndex = 4;
lstTest.DataBind();
lstTest.Enabled = false;
}

能够禁用啊
microblue 2012-03-24
  • 打赏
  • 举报
回复
试了您提供了 HTML 代码示例,会起作用。
我查看了一下我的示例的页面源代码,如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>测试页</title></head>
<body>
<form method="post" action="TestForm.aspx" id="form1">
<div class="aspNetHidden"><input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/w...A==" /></div>
<div class="aspNetHidden"><input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/w...N6" /></div>
<div>
<select size="16" name="lstTest" id="lstTest" class="aspNetDisabled">
<option value="Black">Black</option>
<option value="DarkBlue">DarkBlue</option>
<option value="DarkGreen">DarkGreen</option>
<option value="DarkCyan">DarkCyan</option>
<option selected="selected" value="DarkRed">DarkRed</option>
<option value="DarkMagenta">DarkMagenta</option>
<option value="DarkYellow">DarkYellow</option>
<option value="Gray">Gray</option>
<option value="DarkGray">DarkGray</option>
<option value="Blue">Blue</option>
<option value="Green">Green</option>
<option value="Cyan">Cyan</option>
<option value="Red">Red</option>
<option value="Magenta">Magenta</option>
<option value="Yellow">Yellow</option>
<option value="White">White</option>
</select>
</div>
</form>
</body>
</html>

看来是这个 class="aspNetDisabled" 没有起到应有的作用?
高彬 2012-03-24
  • 打赏
  • 举报
回复
<asp:ListBox ID="ListBox1" disabled="disabled" runat="server" >
<asp:ListItem >aaaa</asp:ListItem>
<asp:ListItem >bbbb</asp:ListItem>
</asp:ListBox>
porschev 2012-03-24
  • 打赏
  • 举报
回复

这个应该没问题啊。。。

4.0也不会有问题。。ListBox最后生成出来就是个SELECT标签而己

你用JS设置它的disabled="disabled"看看
全局变量 2012-03-24
  • 打赏
  • 举报
回复
试试纯 HTML的多选菜单 如果还不行说明你的机子浏览器有问题!

<select name="selectlist" size="23" disabled="disabled" multiple>
<option>123</option>
<option>123</option>
<option>123</option>
<option>123</option>
</select>
microblue 2012-03-24
  • 打赏
  • 举报
回复
谢谢您的回复。我试过了您的代码,在我的机器上还是不行。
对了,我的运行环境是 ASP.NET 4,在 IE6、IE8、IE9 和 Chrome 17 浏览器上都试过了,结果都一样。
全局变量 2012-03-24
  • 打赏
  • 举报
回复

<asp:ListBox ID="ListBox1" runat="server" Enabled=false Width="126px">
<asp:ListItem Value="sss"></asp:ListItem>
<asp:ListItem Value="sss"></asp:ListItem>
<asp:ListItem Value="sssff"></asp:ListItem>
<asp:ListItem></asp:ListItem>
</asp:ListBox>
可以,
你把
lstTest.DataSource = Enum.GetNames(typeof(ConsoleColor));
lstTest.SelectedIndex = 4;
lstTest.DataBind();
换成遍历添加试试。

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧