2015-01-08 131 views
0

奇怪这一个。隐藏输入无价值

在我的.NET MVC 4项目,我已经添加了谁包含此方法在App_Code文件一个文件:

@helper CheckBox(string name, bool isChecked = false, string className = "") { 
    <div class="checkboxHolder"> 
    <input id="@name" name="@name" type="hidden" value="@isChecked") /> 
    <i class="@className checkboxBts fa @((isChecked) ? "fa-check-square-o" : "fa-square-o")" data-checkbox-associated="@name"></i> 
    </div> 
} 

我用它来使用样式字体真棒复选框,所以我的应用程序复选框制成一个输入类型的隐藏者存储一个布尔值和一个图标,以向用户提供反馈。

奇怪的是,在执行时==器isChecked假,隐藏的这个方法返回的是这样的:

<input id="myCheckboxId" name="myCheckboxId" type="hidden" /> 

没有价值可言,当我尝试将其保存到模型的异常被抛出说模型不能被保存。

我已经固定它改变使用的方法:

<input id="@name" name="@name" type="hidden" @((isChecked) ? "value=true" : "value=false") /> 

这是工作的罚款。但是,我想知道是否有人知道原始输出会发生什么。

谢谢大家。

+1

这是由设计,它是在MVC 4,IIRC进行了更改。看到这个:http://www.davidhayden.me/blog/conditional-attributes-in-razor-view-engine-and-asp.net-mvc-4。 –

回答

0

这并不完全是一个重复的,但是这是在Why is my hidden input writing: value=“value” instead of true/false?回答:

如果您有:

<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression)"/> 

[和@SomeBooleanExpression]是假的则完全省略:

<input name="somefield" type="hidden"/> 

要解决这个问题,请考虑.ToString()

所以,使用:

<input id="@name" name="@name" type="hidden" value="value="@(isChecked.ToString())" />