2017-02-10 2 views
2

habe ich das folgende Markup in meiner Create Ansicht für Modell EmployeeBindingModel:MVC 6 asp-Validierung-Zusammenfassung auslässt Eigenschaftsnamen für die Validierung auf versteckten Eingang

<div asp-validation-summary="All" class="text-danger"></div> 
<input type="hidden" asp-for="EmployeeId" /> 

Wenn ich verlassen die dumme rüsteten Create Aktion wie es ist, es Übergibt ein Nullmodell an die Ansicht, obwohl der Controller für EmployeeBindingModel eingegeben wurde. Bei der Übergabe funktioniert die clientseitige Validierung überhaupt nicht, aber das ist der Gegenstand einer anderen Frage.

Diese Frage warum gibt die Modellvalidierung des Controllers nur die folgende Nachricht ohne Eigenschaftsname für EmployeeId zurück?

The value '' is invalid. 
+0

Und warum ist 'The' im SO-Rendering dieses Codes so blau? – ProfK

+0

Die clientseitige Validierung funktioniert standardmäßig nicht mit ausgeblendeten Feldern. JQuery die Standardeinstellungen sagt ignorieren: ": versteckt". –

+0

@MaxMokrousov Warum nicht versuchen, diese Antwort zu machen, und vielleicht vorschlagen, wie die "Ignorieren versteckte" Standard in Frage zu ändern? Ich wäre sehr offen dafür, es zu akzeptieren. – ProfK

Antwort

1

Client-Seite jQuery Validierung hat Standardwert ignore hidden fields.

ignore (Standard: ": hidden") Typ: Selektor. Elemente, die beim Validieren ignoriert werden sollen, einfach ausfiltern. jQuerys Nicht-Methode wird verwendet, daher kann alles, was von not() akzeptiert wird, als diese Option übergeben werden. Eingänge vom Typ Senden und Zurücksetzen werden immer ignoriert, also sind die deaktivierten Elemente

Um es zu beheben, können Sie überschreiben.

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
     <script type="text/javascript"> 
     $.validator.setDefaults({ 
      ignore: "" 
     }); 
     </script> 
} 
+0

Danke, das könnte sehr nützlich sein. Obwohl, wie es ist, wird Ihr Code alle Elemente außer "submit" und "reset" ignorieren. Obwohl der Ignorierwert ein Selektor ist, kann ich Klassen selektiver verwenden. – ProfK

0

Ich glaube, Sie einen Namen schaffen, müssen für sie von der Steuerung abgeholt werden.

<input type="hidden" name="EmployeeId" asp-for="EmployeeId" /> 

Wenn Sie Razor verwenden, können Sie den folgenden verwenden:

@Html.HiddenFor(model => model.EmployeeId) 
+0

Ich habe Razor verwendet, die moderne Version, dh MVC 6, ASP.NET Core, wobei 'genau dasselbe bedeutet wie' @ Html.HiddenFor (model => model.EmployeeId) '. – ProfK

+1

Ah ich sehe, Entschuldigung. Ich wusste das nicht. –

+0

Get mit der Zeit, Kris. :-) Das Schmuckstück, das MVC Core ist, lässt MVC 5 wie einen Mistball aussehen. Es ist alles kostenlos und Open Source, sogar die erforderlichen IDEs sind kostenlos. – ProfK

Verwandte Themen