2015-03-17 14 views
5
@Html.RequiredLabelFor(x => x.FirstName) 
@Html.TextBoxFor(model => model.FirstName, new { Name = "1.first_name", tabindex = "1" }) 
@Html.ValidationMessageFor(model => model.FirstName) 

Gibt es einen Grund, warum beim Passieren zweiten Parameter @ Html.TextBoxFor das Feld überprüft wird, sondern „Validierungsnachricht“ erscheint die Anzeige nicht?Razor @ Html.ValidationMessageFor() nicht „Validierung Fehlermeldung“

@Html.RequiredLabelFor(x => x.FirstName) 
@Html.TextBoxFor(model => model.FirstName) 
@Html.ValidationMessageFor(model => model.FirstName) 

Bei Verwendung einer Überladung, die nur ein Argument (Lambda-Ausdruck) akzeptiert, wird die "Validierungsnachricht" korrekt angezeigt.

In meinem Verständnis wird die tatsächliche Eigenschaft nicht erkannt?

Backing Eigenschaft:

[StringLength(100, ErrorMessage = "Max length 100 characters")] 
[Required(ErrorMessage = "This field is required")] 
[Display(Name = "First name")] 
public string FirstName { get; set; } 

Antwort

12

Die unauffällige Validierung Bibliothek identifiziert 'Dinge Validierung angezeigt werden für' mit dem Attribut name. Es ist nicht so, dass das Angeben zusätzlicher Eigenschaften das Funktionieren der Anwendung verhindert, aber Sie haben die Eigenschaft name geändert und den neuen Namen in Ihrem Validierungshelfer nicht berücksichtigt.

Sie können entweder stoppen den Namen Attribut in Ihrem Text Helfer Ändern (erforderlich, wenn Sie das Standardmodell Bindemittel benutzen, um Ihre Ansicht zurückzukehren), oder Sie

@Html.ValidationMessage("1.first_name") 

Das oben beschriebene Verfahren ist nicht verwenden können, eine gute Idee es sei denn, Sie verwenden JS/JQuery zu validieren und übermitteln Sie Ihre Formulardaten (über AJAX), aus den Gründen von Stephen im Kommentar zu dieser Antwort gegeben.

+1

Verwenden Sie '@ Html.ValidationMessage (" 1.first_name ")' nicht. Dies bedeutet nicht nur, dass die gesamte Modellbindung beim Zurücksetzen verloren geht. Wenn die Ansicht zurückgegeben wird, wird der 'ModelState'-Fehler für diese Eigenschaft nie angezeigt –

5

Sie haben das name-Attribut geändert, sodass es nicht mehr zurückbucht und an Ihr Modell bindet. Jquery.validate.unobtrusive kann nun die Steuerelemente nicht mehr abgleichen, da die Eingabe einen anderen Namen als die zugehörige Validierungsnachricht hat

<input name="1.first_name" ... /> 
<span .. data-valmsg-for="FirstName" ..></span> // There is no control named FirstName 
Verwandte Themen