0

ich zu validieren habe die folgenden Felder in meinem Datenmodell:narrensicher und requiredif Mit einem String-Feld

public bool JointAccount { get; set; } 

[RequiredIf("JointAccount", "true", ErrorMessage = "Please select a Title")] 
public string JointAccountTitle { get; set; } 

[RequiredIf("JointAccount", "true", ErrorMessage = "Please enter first name")] 
public string JointAccountFirstName { get; set; } 

ich folgende in meinen Ansichten habe:

<div class="form-group"> 
    @Html.Label("Joint Account?", htmlAttributes: new { @class = "control-label col-md-4" }) 
    <div class="col-md-8"> 
    <div class="checkbox"> 
     @Html.EditorFor(model => model.JointAccount) 
     @Html.ValidationMessageFor(model => model.JointAccount, "", new { @class = "text-danger" }) 
    </div> 
    </div> 
</div> 

<div class="form-group"> 
         @Html.Label("Title", htmlAttributes: new { @class = "control-label col-md-4" }) 
         <div class="col-md-8"> 
          <select required style="width:100%;height:35px;border-radius:4px;padding-left:10px;" id="JointAccountTitle" name="JointAccountTitle" class="form-control input required"> 
           <option value="">Please Select Title</option> 
           <option value="Mr">Mr</option> 
           <option value="Ms">Ms</option> 
           <option value="Miss">Miss</option> 
           <option value="Mrs">Mrs</option> 
           <option value="Fr">Fr</option> 
           <option value="Dr">Dr</option> 
           <option value="Prof">Prof</option> 
           <option value="Rev">Rev</option> 
           <option value="Sr">Sr</option> 
           <option value="Br">Br</option> 
          </select> 
          @Html.ValidationMessageFor(model => model.JointAccountTitle, "", new { @class = "text-danger" }) 
         </div> 
        </div> 

        <div class="form-group"> 
         @Html.Label("First Name", htmlAttributes: new { @class = "control-label col-md-4" }) 
         <div class="col-md-8"> 
          @Html.EditorFor(model => model.JointAccountFirstName, new { htmlAttributes = new { @class = "form-control" } }) 
          @Html.ValidationMessageFor(model => model.JointAccountFirstName, "", new { @class = "text-danger" }) 
         </div> 
        </div> 

ich, um sicherzustellen, mich versuche, dass Daten werden hier eingegeben, wenn das Kontrollkästchen jointaccount gefüllt ist, aber es scheint keinen Validierungsfehler in der Textbox nur in der Dropdown-Liste für den Titel zu werfen, irgendwelche Ideen hier?

Antwort

0

Ihr das <select> Element manuell und nicht das Hinzufügen der notwendigen data-val-* Attribute erforderlich durch jquery.validate.unobtrusive.js Erstellen der Regeln hinzufügen zu jquery.validate.js so konnte man nie Jquery Validierung für die <select> (beachten Sie, dass das required Attribut ist HTML5 Validierung, nicht Jquery Validierung erhalten).

Wenn Sie behaupten, dass Ihre Validierung auf die JointAccountTitle Eigenschaft (Dropdown-Liste), aber nicht auf die JointAccountFirstName (Textfeld) erhalten, bedeutet dies, dass jQuery Client-Seite Validierung nicht einmal ausgelöst wird. Der wahrscheinlichste Grund ist, dass Sie nicht die richtigen Skripte geladen haben oder sie in der falschen Reihenfolge geladen werden. Sie müssen

jquery-{version}.js 
jquery.validate.js 
jquery.validate.unobtrusive.js 
mvcfoolproof.unobtrusive.js 

Die Jquery Validierung für die Auswahlliste haben, zu erhalten, müssen Sie die entsprechenden data-val- Attribute Sie manuelle html hinzufügen müssen, oder besser gesagt, erzeugen Sie Dropdownlist mit dem DropDownListFor() Methode

@Html.DropDownListFor(m => m.JointAccountTitle, Model TitleList, "Please select title", new { @ class="form-control input }) 

wobei TitleList eine IEnumerable<SelectListItem> Eigenschaft in Ihrem Ansichtsmodell ist, die die Werte für die Optionen enthält

+0

Ich habe jquery, um sicherzustellen, dass alle Selects mit $ step.find überprüft werden ("select: visible"). je (function() {if (! $ (this) .valid()) {anyError = true; }}); – Jay

+0

denke, ich vermisse die mvcfoolproof.unobrturive.js – Jay

+0

Cheers Stephen war neues Projekt vergessen, meine Bundle-Konfiguration richtig zu sortieren, danke – Jay

-1

Ich lief vor kurzem in das gleiche Problem. Versuchen Sie ersetzen die .EditorFor() mit einem .TextBoxFor():

@Html.TextBoxFor(model => model.JointAccountFirstName, new { htmlAttributes = new { @class = "form-control" } }) 

nicht sicher, warum dies ein Problem für narrensicher, aber es funktionierte für mich.

+0

Die Methoden 'EditorFor()' und 'TextBoxFor()' generieren identischen HTML-Code (dies hat nichts mit der IS zu tun) sue) –

Verwandte Themen