2017-05-03 4 views
-1

Ich habe ein MVC 5-Formular, das ich jQuery-Validierung verwenden. Mein Problem ist, dass ich aufgrund einer bestimmten Bedingung einige Textfelder habe, die nicht in das Formular geschrieben werden. DataAnnotation wird jedoch auf Required gesetzt, damit überprüft wird, ob sie sichtbar sind.Kann die Validierung für nicht sichtbare Felder nicht gestoppt werden?

Die Sache ist, dass mein Formular nicht wegen der erforderlichen DataAnnotation auf den Feldern, die nicht sichtbar sind.

Ich schaute mich um und fand einen Vorschlag, um meinem Formular eine ID und einen Namen dann nur die folgende jQuery zu geben. Ich habe die Quelle auf der Seite angezeigt und der Name des Formulars ist korrekt, aber es versucht immer noch, das Feld zu validieren, das nicht sichtbar ist.

<script> 
    $(document).ready(function() { 
     $("#requestForm").validate({ ignore: ":not(:visible)" }); 
    });   
</script> 

Nur um zu verdeutlichen, sind dies keine versteckten Felder. Sie sind Textfelder, die nicht in der Ansicht ausgeschrieben sind. Hier ist der Code in der Ansicht. In meinem Szenario ist dies kein Partial, also werden diese Textboxen nicht einfach auf die Seite geschrieben, aber es verursacht, dass das Model nicht gültig ist, was es daran hindert, gepostet zu werden.

if (Model.RequestType.ToLower() == "partial") 
{ 

    <div class="form-group row"> 
     <div class="col-md-3"> 
      <label class="control-label">From</label> 
      @Html.TextBoxFor(m => m.PartialFrom, new { @maxlength = "4", @class = "form-control" }) 
      @Html.ValidationMessageFor(m => m.PartialFrom, null, new { @class = "text-danger" }) 
     </div> 
    </div> 
} 
+0

Sie es auch wie $ verwenden können ("# myform") validieren ({. ignorieren: ": hidden" }); –

+0

Das ergibt keinen Sinn. Wenn Sie die Eingaben nicht generieren, kann die clientseitige Validierung für etwas, das nicht existiert, nicht durchgeführt werden. Es ist einfach unmöglich (und versteckte Eingaben werden standardmäßig nicht validiert, selbst wenn sie ausgeblendet wären, würde es das Senden des Formulars nicht stoppen). Wenn Sie das Formular nicht einreichen, ist es das Problem. Aber wenn Sie wirklich meinen, dass es die POST-Methode trifft und "ModelState" ungültig ist, dann ist das ein anderes Problem. –

+0

Es traf den POST und der Model-Zustand betrachtete es als erforderlich, obwohl das Eingabefeld nicht sichtbar war. Ich habe das Problem gelöst, indem ich https://github.com/jwaliszko/ExpressiveAnnotations verwendet habe. – Caverman

Antwort

0

Sie können den folgenden Code vor dem vaidation Plugin-Code verwenden:

$(document).ready(function(){  
    $.validator.setDefaults({ 
     ignore: [] 
    }); 
}); 

Sie können prüfen, JQUERY VALIDATION LOGS

+0

Wenn Sie sagen, dass ich es vor dem Validierungs-Plugin hinzufügen soll, verwende ich die integrierte Bündelung von MVC, also habe ich einen @ Scripts.Render ("~/bundles/jqueryval") in meiner _Layout.cshtml Seite. Mein jQuery-Code, den ich gerade getestet habe, ist direkt auf meiner Ansicht (Index.cshtml). Wie würde ich es so machen, dass es vor dem Plugin-Code steht? – Caverman

Verwandte Themen