Управление сервером ASP.NET C # ListBox не отключается - PullRequest
10 голосов
/ 14 сентября 2010

У меня есть 4 элемента управления ListBox на стороне сервера. У каждого из них свойство Enabled установлено в false, но при визуализации они определенно включены. Все они многократные. У них нет привязки к данным или какого-либо кода, касающегося их. Ниже приведена разметка для всех из них (сохраните идентификатор). Я использую v4 .NET Framework с IIS6.

<asp:ListBox runat="server" ID="lstProduct" Enabled="false" SelectionMode="Multiple" Rows="6"></asp:ListBox>

Вот разметка, которая генерируется средой выполнения:

<select size="6" name="ctl00$ctl00$MainContent$MainContent$lstProduct" multiple="multiple" id="MainContent_MainContent_lstProduct" class="aspNetDisabled">

Ответы [ 8 ]

15 голосов
/ 23 сентября 2010

Я нашел решение.В разделе <system.web> файла web.config вы должны добавить <pages controlRenderingCompatibilityVersion="3.5">.

. В Asp.net 4.0 любой элемент управления, который не принимает определенный пользовательский ввод (текстовое поле или пароль), не будет отображаться сdisabled="disabled" атрибут, если установлено Control.Enabled = false.

8 голосов
/ 14 сентября 2010

Попробуйте это:

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

Чтобы удалить его, вы можете просто удалить отключенный тег следующим образом:

this.lstProduct.Attributes.Remove("disabled");
6 голосов
/ 03 января 2013

Запишите следующую строку в файл .cs

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

6 голосов
/ 10 июля 2012

Лучшим решением является наследование от класса ListBox, а затем переопределение свойства SupportsDisabledAttribute.Подробную информацию можно найти в библиотеке MSDN

например,

public class MyListBox : ListBox
{
   public override bool SupportsDisabledAttribute { get { return true; } }
}
2 голосов
/ 29 декабря 2012

Вы можете использовать небольшой jquery в качестве перевязки, пока это не будет исправлено должным образом.Если вы поместите это куда-то, что выполняется для всех страниц, это исправит все отключенные списки на всех страницах:

$(document).ready(function () {
    $("select.aspNetDisabled").attr('disabled', 'disabled');
});
2 голосов
/ 29 декабря 2012

Это следует считать ошибкой в ​​.Net Framework.

http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770141 говорит:

Элементы управления, не предназначенные для пользовательского ввода (например, элемент управления Label), больше не отображают атрибут disabled = "disabled", если для их свойства Enabled установлено значение false (или если они наследуют этот параметр из элемента управления контейнера).

См. Также обоснование изменения (отображение действительного HTML) в http://msdn.microsoft.com/en-us/library/system.web.ui.control.renderingcompatibility.aspx.

.

Но поле ввода предназначено для ввода пользователем, а атрибут disbled поддерживается в html, поэтому он должен отображать disabled="disabled".

1 голос
/ 28 августа 2013

У меня была такая же проблема, но с CheckBoxList.

Установка для свойства Enabled значения false не отключила его. Панель, внутри которой он находится, также не будет влиять на него, когда Enabled = false.

Решением было использование цикла foreach над элементами в CheckBoxList.

foreach (var item in checkBoxList.Items.Cast<ListItem>())
{
    item.Enabled = false;
}
1 голос
/ 01 августа 2012

Вы можете вместо этого отключить параметры в поле выбора, поскольку это позволит прокручивать.

//Listbox cannot be disabled directly, instead the inners should be disabled instead.
foreach(ListItem item in lbCategory.Items)
{
    item.Attributes.Add("disabled", "disabled");

    if (item.Selected)
    {
        //cannot reliably style with [disabled='disabled'][selected='selected'] or :checked:selected etc, so need a class
        item.Attributes.Add("class", "disabledSelected"); 
    }
}

Затем я использую следующий CSS, чтобы пользователь все еще мог видеть предварительно выбранные элементы.

/* Slightly lighter colour than the normal #3399FF because you cannot change the foreground color in IE, so means that it isn't contrasted enough */
select option.disabledSelected { background-color: #97cbff !important} 

К сожалению, из-за моих первоначальных исследований немного неудобно стилизовать отключенные элементы ввода приятным кросс-браузерным способом.Я решил использовать класс для своих целей, однако эта статья , касающаяся стилизации отключенных элементов формы, может помочь .

. Вы также можете заметить, что в IE события click все равно будут вызываться,который, казалось, отменил выбор параметров, но только в некоторых комбинациях попыток использовать [disabled = 'disabled'] [selected = 'selected'] или: флажок: выбран и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...