2012-11-19 2 views
49

I (gizli bir formunun bir parçası olarak) olan bir MVC4 sitesi vardır. form alanı formun bir girdi parametresi için nakil:Gizli girdi yazım neden: true = false yerine value = "value"?</p> <pre><code><input name="somefield" type="hidden" value="@ViewBag.Test"/> </code></pre> <p><code>ViewBag.Test</code> değeri <code>true</code> olup:

public ActionResult SomeAction(bool somefield = false, ...) 

ama somefield hep false olduğunu. inceledikten sonra ben kaynak kodu olduğunu görüyoruz:

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

Ancak, bu çalışırdım biliyorum . Ne oldu, ne yapabilirim?

+0

Benzer soru: http://stackoverflow.com/questions/13451051/boolean-string-comparison-in-conditional-attribute-with-mvc4-razor-2-returns-u – webdeveloper

+0

Ve başka bir ilişkili-ama-farklı (Bu sefer nulls: http://stackoverflow.com/questions/8061647/conditional-html-attributes-using-razor-mvc3 –

+1

Umarım bir hata olarak bildirmişsinizdir. Bu 'engelli' veya 'kontrol edildi' gibi şeyler için makul görünüyor ama kesinlikle 'değer' için yanlıştır. – tvanfosson

cevap

71

Bu davranış, MVC3 ve MVC4 arasında değişti. MVC3 olarak, varsa:

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

çok anlamıyla yazardı:

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

Ancak MVC4 içinde, değer eğer öyleyse true almak, vb kurallar "onay kutusunu" aşağıdaki gibidir:

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

ve eğer false tamamen ihmal:

210 Bundan kaçınmak için, .ToString() göz önünde bulundurun: o zaman dize kurallarını yerine boole kurallarını takip

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

.

+1

Değer özelliği ile eşittir işareti arasında boşluk varsa, o zaman davranışın, beklendiği gibi değerlendirilip atanacağı bir davranış fark edildi. 'value = @ (someBoolean)' değeri 'value =' True '' değerini verirken 'value = @ (someBoolean)' value = 'değerini verir' ' – mcolegro

+0

@mcolegro heh, eğer doğruysa bu eğlenceli olur. Aldo'nun normal HTML bloklarından daha farklı bir davranışı olduğunu unutmayın. –

+0

Bu, MVC4'te böyle alanları anladığımı düşündüğümde, böyle şeylere asıldım. Ancak, bu cevap için teşekkürler, varsayılan olarak "true" yerine "True" yerine, varsayılan olarakLes() 'ın bunu kolayca çözdüğünü anlamıyorum. – eaglei22