2012-04-11 10 views
1

Hier ist meine einfache Klasse ist:Bindung ein Kontrollkästchen zu einem Modell, wenn ein Formular POSTen

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using XXX.Domain; 

namespace XXX.WebUI.Models 
{ 
    public class AccountRegisterModel 
    { 
     ..snip.. 

     [Required(ErrorMessage = "You must agree to our terms of use.")] 
     public bool AcceptedTerms { get; set; } 

     ..snip.. 
    } 
} 

Und meine Ansicht:

<div class="terms"> 
    <input type="checkbox" name="AcceptedTerms" value="AcceptedTerms" /> 
    <img class="sim" src="@Url.Content("~/Public/images/unchecked.gif")" alt="accept the terms" /> 
    <p>I accept the <span class="legalize">Terms of Service &amp; Privacy Policy</span> and wish to continue</p> 
</div> 

Die Ansicht beginnt mit der Checkbox nicht geprüft und mit einigen Javascript code Ich benutze ein Bild, um eine pfiffige Checkbox zu erstellen, und hinter den Kulissen aktualisiere das Kontrollkästchen, damit der korrekte Wert zurückgeschickt wird.

$('.terms input[type="checkbox"]').prop("checked", true); 

Für Debug-Zwecke habe ich eine display:block Regel auf die „versteckten“ hinzugefügt tatsächlichen Checkbox, um zu sehen, wenn die Überprüfung tatsächlich aktiviert wird, wenn ich das Bild klicken und ich kann bestätigen, dass dies der Fall ist.

Auch mit Firebug, hier ist der HTML-Code, gezeigt ist, wenn ich das Bild klicken und das Kontrollkästchen aktiviert ist:

<input type="checkbox" name="AcceptedTerms" value="AcceptedTerms"> 

Wenn das Formular geschrieben wird, wird der Wert von AcceptedTerms falsch bleibt, als wenn der Wert nicht zurück auf meinen Server gebucht werden. Vielleicht fehlt im HTML ein mir unbekanntes Attribut.

Irgendwelche Ideen oder Vorschläge?

+0

Welche Form? Wie posten Sie es? jQuery $ .ajax oder etwas ähnliches? –

+0

Ich habe das HTML-Formular nicht veröffentlicht, da es nicht relevant ist. Es ist einfach für diese POSTS-Daten, nichts mit $ .ajax oder whatnot. :) Wenn Sie es sehen müssen, lassen Sie es mich wissen, aber es ist nichts Besonderes. –

Antwort

0
<input type="checkbox" name="AcceptedTerms" value="AcceptedTerms" /> 

sollte

<input type="checkbox" name="AcceptedTerms" value="true" /> 

Wert

geändert werden muss, gilt nicht AcceptedTerms sein.

Wenn Sie @ Html.CheckBoxFor (x => x.AcceptedTerms)

Sie werden sehen, dass der Wert auf true gesetzt ist.

0

Um den Wert beizubehalten, müssen Sie Ihr Kontrollkästchen an Ihr Ansichtsmodell binden. Ich würde es so haben:

@Html.CheckBoxFor(x => x.AcceptedTerms) 

Wenn Ihr Formular gebucht wird es den Wert der Checkbox also haben sollte. wenn es überprüft wurde (wahr) oder nicht (falsch).

Verwandte Themen