15

Desidero sia la convalida lato client come convalida lato server. Ho capito questo come il seguente:Asp.Net MVC EnableClientValidation non funziona

Modello: (Il modello ha un DataModel (dbml), che contiene la classe di test)

namespace MyProject.TestProject 
{ 
    [MetadataType(typeof(TestMetaData))] 
    public partial class Test 
    { 

    } 

    public class TestMetaData 
    { 
     [Required(ErrorMessage="Please enter a name.")] 
     [StringLength(50)] 
     public string Name { get; set; } 
    } 
} 

Controller è niente di speciale.

The View:

<% Html.EnableClientValidation(); %> 
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post, 
      new AjaxOptions {}, new { enctype = "multipart/form-data" })) 
    {%> 
    <%= Html.AntiForgeryToken()%> 
    <fieldset> 
     <legend>Widget Omschrijving</legend> 
     <div> 
      <%= Html.LabelFor(Model => Model.Name) %> 
      <%= Html.TextBoxFor(Model => Model.Name) %> 
      <%= Html.ValidationMessageFor(Model => Model.Name) %> 
     </div> 
    </fieldset> 
    <div> 
     <input type="submit" value="Save" /> 
    </div> 
<% } %> 

Per rendere tutto questo lavoro ho aggiunto anche i riferimenti ai file js:

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 

Alla fine si deve lavorare, ma non lavorare al 100%: Lo fa si convalida senza aggiornare la pagina dopo aver premuto il pulsante. Fa anche "metà" di convalida lato client. Solo quando si digita del testo nella casella di testo e si esegue il backspace del testo digitato. Viene visualizzata la convalida lato client. Ma quando provo questo toccando tra i controlli non c'è la convalida lato client.

Mi manca qualche riferimento o qualcosa del genere? (Io uso Asp.Net MVC 2 RTM)

risposta

5

Modificare l'ordine del javascript caricato ...

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 

Aveva lo stesso identico problema e questo riesce per me ...

+0

[Here] (http://pastebin.com/685bHTHH) è il modo in cui la convalida è inclusa nella mia pagina. Tuttavia, la validazione del client non funziona affatto, vedi qualche problema? – Shimmy

1

Ho pensato che mi mancasse qualcosa, ma so che il plug-in di validazione jQuery non reagisce a mouseEnter/mouseLeave. Secondo la documentazione di quel plug-in (al plug in page - cercare la sezione con l'etichetta "Un paio di cose da cercare quando si gioca in giro con il demo"):

Prima di un campo è contrassegnato come non valido, la convalida è pigro: prima di inviare il modulo per la prima volta, la scheda utente può, attraverso i campi senza ottenere messaggi fastidiosi - non otterrà spiati prima che avesse la possibilità di entrare in realtà un valore corretto

Penso che sia il stessa regola con la convalida lato client MVC 2. Non posso esserne sicuro perché la documentazione non dice nulla ma "funziona sulla mia macchina" :).

Sono andato con il percorso di convalida jQuery, che è supportato in MVC Futures (notare che la documentazione per questo è inesistente). Per utilizzarlo, è sufficiente sostituire i tag di script per MicrosoftAjax.js, MicrosoftMvcAjax.js e file MicrosoftMvcValidation.js con questi due tag:

<script src="/js/jquery.validate.js" type="text/javascript"></script> 
<script src="/js/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script> 

sostituendo il percorso con il vostro.

Ho anche trovato la necessità di eseguire l'aggiornamento all'ultima versione di jquery.validate.js dalla pagina dello sviluppatore, perché qui stiamo usando una versione successiva di jQuery (1.4).

Spero che questo aiuti.

+0

Ho modificato il mio codice con quello che descrivi, ma senza miglioramenti. Io uso: jQuery 1.4.2 jQuery-validate 1.7 MicrosoftMvcJQueryValidation nessuna versioneNumero disponibile. Ho anche modificato il riferimento all'interno del file .js MicrosoftMvcJQueryValidation su /// , ma ancora nessun miglioramento. – Colin

1

hm ..., è tardi per rispondere, ma provare questo:

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script>