Подтвердить что ты не робот

Отключенный атрибут checkbox в ASP.NET MVC

My ViewModel обладает свойством выбора и выбора. Оба являются логическими. Я хотел бы, чтобы мой взгляд имел флажок, который включен, когда выбрано значение true и отключено, когда выбрано значение false. Каков правильный синтаксис бритвы, чтобы выполнить это?

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

 @Html.CheckBoxFor(modelItem => item.Selected, new { @disabled = !item.Selectable })
4b9b3361

Ответ 1

Нелегко добиться этого с помощью if условия внутри вспомогательного метода, потому что все нижеприведенные разметки будут отображать отключенный chechbox.

<input type="checkbox" disabled>
<input type="checkbox" disabled="disabled">
<input type="checkbox" disabled="false">
<input type="checkbox" disabled="no">
<input type="checkbox" disabled="enabled">

Это должно работать в бритве. Простой Если условие и рендеринг, что вы хотите.

@if(item.Selected)
{ 
  @Html.CheckBoxFor(modelItem => item.Selected)
}
else
{
    @Html.CheckBoxFor(modelItem => item.Selected, new { @disabled = "disabled"})
}

Вы можете подумать о написании пользовательского html-помощника, который отображает правильную разметку для этого.

Ответ 2

Это не сработает, потому что <input disabled="anything" /> приведет к отключению управления. Вам нужно иметь свойство @disabled, когда оно должно быть отключено.

Попробуйте что-то вроде этого:

@Html.CheckBoxFor(modelItem => item.Selected, item.Selectable ?  (object)new {} :  (object)new { @disabled = "disabled })

Обратите внимание, что вам может потребоваться выполнить команду (object)

Ответ 3

Извините, мой предыдущий ответ был неправильным.

Элемент ввода будет отключен, как только он отключит атрибут. Не имеет значения, истинно ли значение false. В HTML нельзя отключить значение false.

Таким образом, вам нужно будет установить отключенный атрибут только в том случае, если условие действительно.

что-то вроде:

object attributes = null;
if (!item.Selectable)
{
    attributes = new { disabled = "disabled"};
}
@Html.CheckBoxFor(modelItem => item.Selected, attributes)