• .NET Conf China
...

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

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

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

  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <title>测试页</title>
  6. </head>
  7. <body>
  8. <form id="form1" runat="server">
  9. <div>
  10. <asp:ListBox ID="lstTest" Rows="16" runat="server" />
  11. </div>
  12. </form>
  13. </body>
  14. </html>


  1. using System;
  2. using System.Web.UI;

  3. namespace WebAppTester
  4. {
  5. public partial class TestForm : Page
  6. {
  7. protected void Page_Load(object sender, EventArgs e)
  8. {
  9. lstTest.DataSource = Enum.GetNames(typeof(ConsoleColor));
  10. lstTest.SelectedIndex = 4;
  11. lstTest.DataBind();
  12. lstTest.Enabled = false;
  13. }
  14. }
  15. }

在上述代码中,我把 ListBox 控件的 Enabled 属设为 false,用于禁用该控件,不让用户选择该 ListBox 中的项目。
但是这没有起到作用,该 ListBox 还是可以进行选择。
请问这是怎么回事?应该如何解决?
谢谢!
...全文
给本帖投票
566 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,240

社区成员

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

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

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

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

手机看
关注公众号

关注公众号

客服 返回
顶部