2015-03-04 14 views
23

otrzymuje następujące ViewModel:ASP.NET MVC 5 renderuje inną wartość bool do ukrytego wejścia

public class FooViewModel 
{ 
    public bool IsBoolValue { get; set; } 
} 

i ten pogląd:

<input type="hidden" id="Whatever" data-something="@Model.IsBoolValue" value="@Model.IsBoolValue" /> 

Wyjście z pola wprowadzania ukryty jest taka:

<input type="hidden" id="Whatever" data-something="True" value="value">

Dlaczego atrybut value nie jest ustawiony to True, ale atrybut data-something to?

Czy jest to zmiana w MVC 5, która by to spowodowała, ponieważ w moich aplikacjach MVC 4 ten problem nie występuje.

+0

Najpierw należy podać nazwę twojego wejścia do IsBoolValue, do tego wartość wejściowa zostanie ustawiona przez mvc, teraz powiązanie modelu nie działa, jeśli wskażesz nazwę wejścia do wiązania modelu IsBoolValue będzie działać. – MDDDC

Odpowiedz

27

Myślę, że to wymyśliłem.

wierzę viewengine Razor jest przylegający do HTML 5 sposób ustalania logicznych atrybuty, jak opisano tutaj:

What does it mean in HTML 5 when an attribute is a boolean attribute?

W HTML 5, atrybutem bool jest ustawiony tak:

<input readonly />

lub

<input readonly="readonly" />

Więc przeglądarka Razor przyjmuje wartość logiczną modelu i wyrenderuje (w moim przypadku) atrybut value, jeśli Model.IsBoolValue jest true. W przeciwnym razie, jeśli jest to false, atrybut value nie jest w ogóle renderowany.

EDIT:

Jak wspomniano Zabavsky w komentarzach, aby wymusić wartość Prawda czy fałsz pojawiać się w value attrbiute, proste użycie ToString():

<input type="hidden" value="@Model.BoolProperty.ToString()" />

+5

Myślę, że warto wspomnieć, że rozwiązaniem tego problemu jest po prostu wywołanie 'ToString()' na własności: 'value =" @ Model.IsBoolValue.ToString() "'. – Zabavsky

Powiązane problemy