2015-01-08 175 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())" />