2012-04-13 9 views
15

Ich habe die Ansicht unter:Führen Sie die Validierung auf versteckte Felder

@Html.LabelFor(m => m.CompanyPostCode) 
    @Html.TextBoxFor(m => m.CompanyPostCode) 

    @Html.LabelFor(m => m.CompanyCity) 
    @Html.TextBoxFor(m => m.CompanyCity) 

    @Html.HiddenFor(m => m.CompanyCityID) 

sind alle Attribute wie [Erforderlich] meiner Meinung nach Modell markiert. Dann ist das Problem, dass meine CompanyCityID (als Required markiert) ausgeblendet ist und somit keine Validierung in der Ansicht erfolgt. Wenn ich dieses Attribut in meiner Ansicht zeige, ist die Validierung abgeschlossen.

enter image description here

Meine Frage: ist es möglich, eine Validierung auf einem versteckten Feld durchführen? Ein Workaround existiert?

Es mag ein wenig seltsam erscheinen, ein verstecktes Feld zu validieren. Der Grund dafür ist, dass dieses Feld basierend auf speziellen Regeln aus jQuery gefüllt wird. Wenn es nicht gefüllt ist, weiß ich, dass etwas in der Ansicht nicht gültig ist.

Danke.

Antwort

27

Der mögliche Grund kann sein, dass es ignore: ':hidden' Zeile in jquery.validate.unobtrusive.js Datei gibt.

Nach Version 1.9.0 ist es ein Standardverhalten. Sie können das beheben manuell durch

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

Zugabe Wie Sie here

Eine weitere Änderung der Einrichtung von Formularen mit versteckten Elemente erleichtern sollen sehen können, werden diese nun standardmäßig ignoriert (Option „ignorieren "Hat ": versteckt "jetzt als Standard). In der Theorie könnte dies eine bestehende Einrichtung brechen. Im unwahrscheinlichen Fall, dass es tatsächlich funktioniert, können Sie es durch beheben, indem Sie die ignore-Option auf "[]" setzen (eckige Klammern ohne die Anführungszeichen).

+0

Vielen Dank. Das ist mir jetzt klar. – Bronzato

+0

Ich hasse es wirklich, der Typ zu sein, der Leute korrigiert, aber die Einstellung ignoriert wird nicht von jquery.validate.unobtrusive.js gesetzt. Beachten Sie auch, wie setDefaults funktioniert, bevor Sie es verwenden. Wenn Sie die Standardwerte festlegen, nachdem Sie die Validierung für das Formular bereits verdrahtet haben, sind Sie mit diesem Aufruf zu spät. Bitte lesen Sie meine Beschreibung für eine ausführlichere Erklärung. http://stackoverflow.com/questions/8466643/jquery-validate-enable-validation-for-hidden-fields/14574974#14574974 – JustinMichaels

+0

@JustinMichaels, vielleicht hat sich etwas geändert, seit ich diese Antwort geschrieben habe. Zu dieser Zeit habe ich jquery.validate.unobtrusive.js überprüft und die Einstellung ignoriert. –

-1

können Sie immer @Html.HiddenFor(m => m.CompanyCityID) in einem versteckten div setzen und es zu EditorFor() ändern.

CSS

.hidden { 
    display: none; 
}​ 

Ansicht

<div class="hidden"> 
     @Html.EditorFor(m => m.CompanyCityID) 
</div 
+2

Dies scheint nicht zu funktionieren. Ich denke, es kann immer noch sagen, dass es versteckt ist, auch wenn es ein Elternteil ist, der versteckt ist. –

0

Sie können auch auf Kommentar-Datei nur diese Zeile in der jquery.validate.js. ignorieren: ": versteckt"

+0

doppelte Antwort auf Chuck Norris –

0

Ich hatte dieses Problem. In meinem Fall musste ich nach einem Ajax-Aufruf den Validator aufrufen und dann das Flag 'ignore' hinzufügen. Siehe Beispiel unten:

$.validator.unobtrusive.parse("#frm"); 
$.validator.setDefaults({ ignore: [] }); 

wurden auf document.ready (diese genannt).

0

Wenn Sie JavaScript nicht verwenden müssen, können Sie in Ihrem Controller und in Ihrer Aktion der zugehörigen Ansicht einen Modellfehler hinzufügen, bevor Sie Ihr Modell validieren.Beispiel:

[HttpPost] 
     public ActionResult Fix(YourModel mdl) 
    { 

    if (mdl.CompanyCityID==0) 
     ModelState.AddModelError("", "Your error message!"); 

    if (ModelState.IsValid) 
    { 


     // 
     //Some code 
     // 

     return View("YourView", yourlist); 
    } 

    return View(mdl); 
} 
Verwandte Themen