2016-02-16 4 views
1

Я использую MVC6 и есть поле ввода флажок в моей форме, но когда форма передается значение для флажка всегда получает передается в ViewModel как ложь:Checkbox не работает с булевой ViewModel собственности

Здесь то, как свойство объявляется в моем ViewModel:

[Display(Name = "Include Sales Tax")] 
public bool IncludeSalesTax { get; set; } 

Вот как форма выглядит в моей MVC6 форме бритвы:

<div class="form-group"> 
    <div class="checkbox"> 
     <label><input asp-for="IncludeSalesTax" type="checkbox" value="">@Html.DisplayNameFor(m => m.IncludeSalesTax)</label> 
    </div> 
</div> 

Я понял, что выше будет лучшим способом следовать стандартам Twitter Bootstrap и использовать asp-for ASP.NET MVC6 для привязки к модели.

Когда я отправляю форму, значение для IncludeSalesTax всегда неверно, даже если отмечено. Что я делаю не так?

+1

Зависит от вашего объявления doctype. Входы являются недействительными элементами и не требуют закрытия тега в HTML5. Скорее всего, это связано с атрибутом пустого значения. – Sam

ответ

1

Дав Visual Studio генерирует форму, основанную на моем ViewModel вот как он это делает:

 <div class="checkbox"> 
      <input asp-for="isTaxable" /> 
      <label asp-for="isTaxable"></label> 
     </div> 

Кроме того, мне не хватает закрытия моего ввода тега. Так что это может быть сделано, как это, которое является самозагрузки предпочтительным способом:

<label><input asp-for="isTaxable" type="checkbox" value=""/>@Html.DisplayNameFor(m => m.isTaxable)</label> 
+1

то, что вам не хватало, - это косая черта в конце входного тега. это сделало ваш маркер недействительным. –

3

Вид двигателя бритвы обычно создает поле и один скрытый вход с тем же именем.

Вы можете просто использовать HTML ниже, чтобы убедиться, что вы получите желаемый результат:

<div class="form-group"> 
     <div class="checkbox">  
    <input type="checkbox" value="true" name="IncludeSalesTax" />Include Sales Tax 
    <input type="hidden" value="false" name="IncludeSalesTax" /> 
     </div> 
    </div> 
2

вход типа флажок посылает «на», если он установлен. В противном случае он не отправляется. Важно, чтобы атрибут value был равен true. В этом случае он отправляет true или ничего, что идеально подходит для привязки к булевому.

<input type="checkbox" name="yourPropertyName" value="true" checked /> 
Смежные вопросы