2012-07-26 15 views
5

W mojej aplikacji ASP.NET MVC 4 staram się używać dyskretnej weryfikacji klienta przy pomocy Fluent Validation.ASP.NET MVC Dyskretna weryfikacja klienta nie działa

<script src="/Scripts/jquery.validate.min.js" type="text/javascript"> 
</script> 
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"> 
</script> 

Mam dwa pliki .js, które VS2010 zapewnia po utworzeniu nowej aplikacji ASP.NET MVC 4. Mam również włączone sprawdzanie poprawności strony klienta w moim pliku web.config.

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

O ile mi wiadomo, kiedy jest włączone walidacji klienta i dyskretny JavaScript, pola wejściowe z reguły walidacji klienta zawierają dane-val = „true” atrybutu do uruchomienia dyskretne walidacji klienta. I mam te pola na moich polach wejściowych.

Na przykład

<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> 

Jednak, kiedy przedstawić moją formę, to jest wysyłany do sterownika i mój model jest zaznaczone na mojego kodu sterownika, zamiast po stronie klienta.

EDIT:

To jest mój tag otwarcie formularza.

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

Wszelkie pomysły? Dzięki.

+2

Głupie pytanie, ale czy upewniłeś się, że główny plik jQuery js i dwa, które tam pokazałeś, zostały poprawnie rozwiązane? –

+0

główny plik jQuery jest zdecydowanie rozwiązany, mam wiele funkcji jQuery działa poprawnie. Nie wiem, czy dwa z nich rozwiązały się, czy nie. Te pliki istnieją i wydają się dostępne w części skryptów w chromowanych narzędziach programistycznych. –

+0

Kolejne głupie pytanie, czy wygenerowałeś dane wejściowe z modelu do sprawdzenia? –

Odpowiedz

3

Czy dodano konfigurację dla MVC?

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

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

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

Należy również skonfigurować każdy widok modelu/walidator:

[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); 
    } 
} 

Jeśli to nie pomoże, można zakładać przykład walidatora, który nie działa poprawnie? Nie wszystkie weryfikacje można wykonać po stronie klienta. Na przykład następujący weryfikator działa tylko po stronie serwera:

// 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 za odpowiedź, ale mam je wszystkie. To jest mój kod weryfikacyjny: RuleFor (product => product.Manufacturer) .NotNull(); –

+0

Czym jest producent? Czy to ciąg lub klasa? – Dismissile

+0

tylko ciąg. –

Powiązane problemy