2014-01-05 6 views
31

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

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

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

Вопрос: Что такое 'item'? Я вижу на вашей лямбде, что у вас есть 'modelItem => item.Selected', но' item' не зависит от самой модели? Или, возможно, вы хотели сказать 'modelItem => modelItem.Selected'? – EfrainReyes

ответ

59

Это не легко достичь этого с 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-помощник, который сделает надлежащую разметку для этого.

+1

Для HTML5 я пишу 'new {@disabled =" "}' как '

0

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

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

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

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

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

Я попробовал вашу рекомендацию. Все возвращается как инвалид. –

+0

вам, вероятно, нужны @ префиксы – erjoalgo

18

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

попробовать что-то вроде этого:

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

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

+0

Это намного более чистый вариант, чем выбранный ответ. Вам нужно бросить как объект; в моем случае у меня было это: @ Html.EditorFor (p => item.Selected, new {htmlAttributes = item.Selectable? (object) new {}: (object) new {@disabled = "disabled"}}) – Ian

+1

Вы можете просто иметь новый объект() с левой стороны –

Смежные вопросы