Frage

Ich stehe auf ein Problem, bei dem ich ein einfaches Formular hinzufügen/bearbeiten und die clientseitige Validierung (jQuery/microsoftMVCJQueryValidation.js) habe, die aus Datenanmerkungen generiert und Client-Seite aktiviert wird, indem ich in meiner Ansicht Folgendes aufruft:

<% Html.EnableClientValidation(); %>

Dies scheint für die meisten Elemente einwandfrei zu funktionieren, aber ich habe eine Instanz, in der ich eine boolesche Eigenschaft habe, die als Kontrollkästchen verwendet wird:

<%= Html.EditorFor(model => model.Chargeable)%>

Das kann entweder wahr/falsch sein (krank/ungezwungen).

Da der BOOL ein Werttyp ist und nicht nullbar ist, wird es als erforderliche Eigenschaft gerendert und zeigt einen Fehler (Client -Seite) an, wenn das Formular eingereicht wird. Lesen Sie "Das Gebühren für das Feld ist erforderlich". generiert ist zwei Teil (sowohl das Kontrollkästchen als auch den versteckten Wert), es wird die Post -Back -Validierung übergeben.

Nach dem Durchsuchen des MVC 2 -Quellcodes habe ich es geschafft, momentan ein "schnelles und schmutziges" Fix einzulegen, das festgelegt werden soll:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Hat noch jemand Ideen oder Vorschläge dafür bekommen, wie ich das umgehen kann?

IMO, ich glaube nicht, dass MVC den Client-Side-erforderlichen Validator für Kontrollkästchen einstellen sollte, die mit den Methoden html.editorfor/html.checkbox (für) gerendert werden.

Hinweis: Ich verwende den ASP.NET MVC 2 RC2 und die MicrosoftMVCJQueryValidation.js aus der passenden MVC -Futures -Version.

War es hilfreich?

Lösung

Ich nehme an, der einfachste Weg zum Umgang ist es, die Funktionen der Regeln ("entfernen", [Regeln]) auf den Elementen (hauptsächlich Kontrollkästchen) aufzurufen, aus denen ich die clientseitige Validierung entfernen möchte:

<script type="text/javascript">
  $(document).ready(function() {
    $('#Chargeable').rules('remove', 'required');
  });
</script>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top