ASP.NET C#ListBox服务器控件不会禁用

Jac*_*b K 11 c# asp.net listbox

我有4个服务器端ListBox控件.所有这些都将其Enabled属性设置为false,但在渲染时它们肯定已启用.它们都是多选的.它们没有数据绑定或触摸它们的任何代码.下面是所有这些标记(保存ID).我正在使用IIS6运行.NET Framework的v4.

<asp:ListBox runat="server" ID="lstProduct" Enabled="false" SelectionMode="Multiple" Rows="6"></asp:ListBox>
Run Code Online (Sandbox Code Playgroud)

这是运行时生成的标记:

<select size="6" name="ctl00$ctl00$MainContent$MainContent$lstProduct" multiple="multiple" id="MainContent_MainContent_lstProduct" class="aspNetDisabled">
Run Code Online (Sandbox Code Playgroud)

Jac*_*b K 15

我找到了解决方案.在<system.web>web.config部分中,您必须添加<pages controlRenderingCompatibilityVersion="3.5">.

使用Asp.net 4.0时,任何不接受特定用户输入(文本框或密码)的控件disabled="disabled"Control.Enabled = false设置时都不会使用属性进行渲染.


CLa*_*aff 9

试试这个:

protected void Page_Load(object sender, EventArgs e)
{
  if (!this.IsPostBack)
  {
   this.lstProduct.Attributes.Add("disabled", "");
  }
}
Run Code Online (Sandbox Code Playgroud)

要删除它,您可以删除禁用的标记,如下所示:

this.lstProduct.Attributes.Remove("disabled");
Run Code Online (Sandbox Code Playgroud)


小智 7

在.cs文件中写下以下行

ListBox.Attributes.Add("disabled","true");


小智 6

更好的解决方案是从ListBox类继承,然后重写SupportsDisabledAttribute属性.详细信息可以在MSDN库中找到

例如

public class MyListBox : ListBox
{
   public override bool SupportsDisabledAttribute { get { return true; } }
}
Run Code Online (Sandbox Code Playgroud)