2011-01-16 19 views
8

Sto utilizzando MVC3 con Razor.
Ho incluso il seguente nel mio _Layout.cshtml:MVC3 Convalida lato client non funzionante

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> 

La mia forma assomiglia:

@{ 
     ViewBag.Title = "Register"; 
     Html.EnableClientValidation(); 
    } 
    @using (Html.BeginForm("Register")) 
    { 
     <fieldset> 
     <p> 
      @Html.LabelFor(o => o.Email) 
      @Html.TextBoxFor(o => o.Email) 
      @Html.ValidationMessageFor(o => o.Email) 
     </p> 
    ... 
</fieldset> 
} 

mio ViewModel ha DataAnnotations (e implementa IValidatableObject), ed è valida durante il controllore azione. Tuttavia non riesco a essere in grado di utilizzare la convalida JS sul clientide senza pubblicare il modulo.

Cosa mi manca?

risposta

27

In ASP.NET MVC 3 il plugin jquery convalida è l'impostazione predefinita per l'esecuzione di validazione lato client. Quindi è possibile rimuovere tutti gli script Microsoft*.js dal progetto. Hai solo bisogno di:

<script src="@Url.Content("~/Scripts/jquery-1.4.4.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

e rimuovere la chiamata Html.EnableClientValidation();. La convalida del client è abilitata in web.config:

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

L'ho fatto. Ancora non è successo nulla La convalida dovrebbe avvenire ad ogni battitura? O quando la casella di testo perde l'attenzione? Se i campi vuoti con attributi richiesti non sono validi quando carico il modulo? – TDaver

+1

@TDaver, per impostazione predefinita la convalida del client si verifica quando l'input perde lo stato attivo o quando si tenta di inviare il modulo. –

1

Rimuovere Html.EnableClientValidation(); e Goto vostra configurazione web, e assicurarsi di avere un appSetting che assomiglia di seguito:

<add key="ClientValidationEnabled" value="true"/> 
1

Prova ad aggiungere le seguenti linee alla tua vista.

HtmlHelper.ClientValidationEnabled = true; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

Insieme tra cui jQuery-1.4.4.js, jquery.validate.js, jquery.validate.unobtrusive.js

ho capito di lavorare per la mia app, ma sembra non calci in fino a quando non ho messo un cattivo valore. Per esempio

[Required(ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRequired")] 
     [Range(1, Int32.MaxValue, ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRange")] 
     public int? TestCountThreshold { get; set; } 

poi ho messo in un 0 sul front-end e dopo che la convalida lato client funziona perfettamente. Vorrei che la convalida funzionasse per le caselle di testo vuote iniziali ... Sembra errato aspettare che la convalida torni a un valore errato.

Problemi correlati