2013-11-25 9 views
6

Ich habe eine Rasierer Ansicht (Framework 4.5, MVC 5) und ein HTML-Input-Typ = Checkbox mit dem Wert gleich einem Modell booleschen Wert, sondern anstelle von True oder False bindet "Wert ".MVC 5 Razor View nicht verbindlich bool zur Eingabe

Dies ist mein Code:

for (int index = 0; index < Model.Item1.Locations.Length; index++) 
     { 
      WSTupleOfInt32StringStringBoolean location = Model.Item1.Locations[index]; 
       <div class="editor-field"> 
        <input id="@string.Format("presentation.ServiceInfoes[{1}].Locations[{0}].Key", index, Model.Item2)" type="checkbox" value="@location.ThirdValue" name="@string.Format("presentation.ServiceInfoes[{1}].Locations[{0}].ThirdValue", index, Model.Item2)" /> 
       </div> 
       <div class="editor-label"> 
        <label for="@string.Format("presentation.ServiceInfoes[{1}].Locations[{0}].Key", index, Model.Item2)">@location.FirstValue</label> 
        @if (!string.IsNullOrEmpty(location.SecondValue)) 
        { 
         <a href="@string.Format("//maps.google.com/?q={0}", location.SecondValue)" target="_blank"><img alt="@location.SecondValue" src="@string.Format("//maps.google.com/maps/api/staticmap?center={0}&markers=color:blue|{0}&zoom=15&size=64x64&sensor=false", location.SecondValue)" /></a> 
        } 
       </div><br /> 
     } 

Die location.ThirdValue ist die Boolesche Eigenschaft, debuging die Eigenschaft es ist in Ordnung .. aber in der HTML erhalte ich value="value" und nicht value="false".

Was passiert?

Antwort

1

Tun Sie dies

<input id="@string.Format("presentation.ServiceInfoes[{1}].Locations[{0}].Key", index, Model.Item2)" type="checkbox" @(location.ThirdValue ? "checked" : "") name="@string.Format("presentation.ServiceInfoes[{1}].Locations[{0}].ThirdValue", index, Model.Item2)" /> 

Der Wert Checkbox nicht einstellen oder nicht geprüft werden, Wert andere Funktion hat. Wenn Sie beispielsweise den Wert auf "testen" setzen und das Kontrollkästchen aktivieren, sehen Sie beim Senden des Formulars, dass anstelle des wahren Werts der übermittelten Variablen "test" lautet.

können Sie ziemlich coole Sachen damit machen. Zum Beispiel haben Sie 3 Kontrollkästchen in Ihrem Formular. Alle haben den gleichen Namen, aber unterschiedliche Werte. Wenn Sie das Formular absenden, wird das Ergebnis eine durch Kommas getrennte Zeichenfolge mit Werten der aktivierten Kontrollkästchen sein.

6

Sehen Sie diese Answer

Grundsätzlich Sie HTML.CheckBoxFor(model => model.booleanProperty)

verwenden möchten