2012-07-26 10 views
5

In meiner ASP.NET MVC 4-Anwendung versuche ich, unaufdringliche Client-Validierung mit Fluent-Validierung zu verwenden.ASP.NET MVC Unauffällige Client-Validierung funktioniert nicht

Ich habe diese beiden .js-Dateien, die VS2010 bietet, wenn neue ASP.NET MVC 4-Anwendung erstellt wird. Ich habe auch die clientseitige Validierung in meiner web.config-Datei aktiviert.

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

Soweit ich weiß, wenn Client-Validierung und unaufdringlich JavaScript aktiviert sind, Eingabefelder mit einer Client-Gültigkeitsregel enthalten die Daten-val = „true“ -Attribut unaufdringlich Client Validierung auslösen. Und ich habe dieses Feld auf meinen Eingabefeldern.

Zum Beispiel

<input class="input-validation-error" data-val="true" data-val- 
required="error text here" id="purchasePrice" 
name="PurchasePrice" type="text" value=""> 

<span class="field-validation-error error" data-valmsg-for="PurchasePrice" 
data-valmsg-replace="true">'Purchase Price' must not be empty.</span> 

Allerdings, wenn ich meine Form einreichen, es gebucht wird an der Steuerung und mein Modell auf meinem Controller-Code anstelle von Client-Seite überprüft.

EDIT:

Dies ist meine Form Starttag.

@using (Html.BeginForm("Create", "Product", FormMethod.Post, 
    new { enctype = "multipart/form-data", @class = "mainForm", 
     @id = "productCreateForm" })) 

Irgendwelche Ideen? Vielen Dank.

+2

Dumme Frage, aber haben Sie sichergestellt, dass die JQuery JS-Hauptdatei und die beiden, die Sie dort angezeigt haben, korrekt aufgelöst werden? –

+0

Haupt jQuery-Datei ist definitiv gelöst, ich habe eine lf von jquery-Funktionen richtig funktioniert. Ich weiß nicht, ob zwei von ihnen beschlossen haben oder nicht, um ehrlich zu sein. Diese Dateien existieren und sie scheinen in den Skripten von Chrome Developer Tools verfügbar zu sein. –

+0

Eine weitere dumme Frage, haben Sie Eingaben von einem Modell generiert, um validiert zu werden? –

Antwort

3

Haben Sie die Konfiguration für MVC hinzugefügt?

protected void Application_Start() { 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 

    // this line is required for fluent validation 
    FluentValidationModelValidatorProvider.Configure(); 
} 

Sie müssen auch jede Ansicht Modell/Validator konfigurieren:

[Validator(typeof(PersonValidator))] 
public class Person { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public int Age { get; set; } 
} 

public class PersonValidator : AbstractValidator<Person> { 
    public PersonValidator() { 
     RuleFor(x => x.Id).NotNull(); 
     RuleFor(x => x.Name).Length(0, 10); 
     RuleFor(x => x.Email).EmailAddress(); 
     RuleFor(x => x.Age).InclusiveBetween(18, 60); 
    } 
} 

Wenn dies nicht hilft, könnten Sie ein Beispiel für einen Validator schreiben, die nicht richtig funktioniert? Nicht alle Validierung kann clientseitig durchgeführt werden. Der folgende Validierer funktioniert beispielsweise nur serverseitig:

// when validator rules are always server side 
public class ServerSideValidator : AbstractValidator<Person> { 
    public ServerSideValidator() { 
     When(x => x.Name == "Foo",() => { 
      RuleFor(x => x.Email).EmailAddress(); 
     }); 
    } 
} 
+0

thx für die Antwort, aber ich habe alle von ihnen. Dies ist mein Validierungscode: RuleFor (product => product.Manufacturer) .NotNull(); –

+0

Was ist Hersteller? Ist das eine Zeichenfolge oder eine Klasse? – Dismissile

+0

nur eine Zeichenfolge. –