我在 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 还是可以进行选择。
请问这是怎么回事?应该如何解决?
谢谢!

解决方案 »

  1.   


    <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();
    换成遍历添加试试。
      

  2.   

    谢谢您的回复。我试过了您的代码,在我的机器上还是不行。
    对了,我的运行环境是 ASP.NET 4,在 IE6、IE8、IE9 和 Chrome 17 浏览器上都试过了,结果都一样。
      

  3.   

    试试纯 HTML的多选菜单 如果还不行说明你的机子浏览器有问题!<select name="selectlist" size="23" disabled="disabled" multiple>
    <option>123</option>
    <option>123</option>
    <option>123</option>
    <option>123</option>
    </select>
      

  4.   


    这个应该没问题啊4.0也不会有问题。。ListBox最后生成出来就是个SELECT标签而己你用JS设置它的disabled="disabled"看看
      

  5.   

        <asp:ListBox ID="ListBox1"  disabled="disabled"  runat="server" >
            <asp:ListItem >aaaa</asp:ListItem>
              <asp:ListItem >bbbb</asp:ListItem>
        </asp:ListBox>
      

  6.   

    试了您提供了 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" 没有起到应有的作用?
      

  7.   

    应该不会出现这种情况啊,我试了行啊,你建个页面重新试一试啊
    前台<%@ 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;
            }能够禁用啊
      

  8.   


    我的页面源代码
    <!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>
      

  9.   

    class="aspNetDisabled"
    没看到你引用任何CSS。
    lstTest.Enabled = false; 的作用也是在select 上加 disabled="disabled"真没看出你的代码哪出问题了!
    重新编译项目试试。
      

  10.   

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

  11.   

    这是 ASP.NET 4 自动生成的代码,我做的仅是: lstTest.Enabled = false 。
    请参阅 10 楼的 Stackoverflow 网站的帖子,老外也有同样的问题。
      

  12.   

    老外的意思是说 <system.web><pages controlRenderingCompatibilityVersion="3.5"> 改成3.5你有两种选择。
    不用控件生成。多选菜单用<asp:Literal 自己拼装 HTML按老外说的用3.5 
      

  13.   


    那你设置一下看看没有4.0的环境帮你测不了。。这个控件基本没有用过这种样子都是用ul li加上CSS、js来完成
      

  14.   

    以下 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 属性。
      

  15.   

    我新建了以下 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 文件禁止用户进行选择呢?
      

  16.   

    真的没办法吗?
    将 ListBox 的 Enabled 属性设置为 false,从语义上说就是不让用户进行选择,microsoft 既然在 ASP.NET 4 中改用 class 来实现这个功能,总有他的道理吧。难道非要在 <system.web> 中使用 <pages controlRenderingCompatibilityVersion="3.5" /> 退回到 ASP.NET 3.5 模式?