2010-01-04 26 views
5

Non riesco a ottenere alcuna convalida lato client su un'app MVC 2 RC.ASP.NET MVC 2 Convalida lato client RC non funzionante

Il mio modello è il seguente:

public class ExampleModel 
{ 
    [Required(ErrorMessage="Test1 is required")] 
    [DisplayName("Test1")] 
    public string Test1 { get; set; } 

    [Required(ErrorMessage="Test2 is required")] 
    [DisplayName("Test2")] 
    public string Test2 { get; set; } 
} 

mio punto di vista ha il seguente codice:

<% Html.EnableClientValidation(); %> 
<%= Html.ValidationSummary(true, "Test was unsuccessful.") %>  
<% using (Html.BeginForm()) { %> 
<div> 
    <div class="editor-label">Test1:</div> 
    <div class="editor-field"> 
     <%= Html.TextBoxFor(m => m.Test1) %> 
     <%= Html.ValidationMessageFor(m => m.Test1) %> 
    </div> 

    <div class="editor-label">Test2:</div> 
    <div class="editor-field"> 
     <%= Html.TextBoxFor(m => m.Test2) %> 
     <%= Html.ValidationMessageFor(m => m.Test2) %> 
    </div> 

    <p> 
     <input type="submit" value="Test" /> 
    </p> 
</div> 

lascio entrambi i campi vuoti e fare clic sul pulsante Test e va diritto al gestore postale del controller senza convalida sul lato client. Non sono sicuro di cosa mi stia perdendo.

Ho il seguente javascript incluso anche nella vista (non so se ho bisogno di tutto):

<link href="../../Scripts/jquery-1.3.2.min.js" type="text/javascript" /> 
<link href="../../Scripts/jquery.validate.min.js" type="text/javascript" />  
<link href="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript" /> 

Tutte le idee che sto facendo male. Mi sento come se mi mancasse qualcosa di semplice e la documentazione per MVC 2 è scarsa.

Edit: Ho aggiunto il link:

<link href="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />

E ho incluso il file nel mio progetto che ho dovuto scaricare dall'alto dei link nelle risposte. Ancora non funziona affatto. Altre idee?

Edit: Sto usando Visual Studio 2008 con MVC 2 RC (non beta) e sto cercando esempi scaricabili o inviati di validazione lato client che lavorano con il rilascio di RC.

risposta

7

Ok ho capito questo ... ed è colpa al 100%. Anche se, un paio di post includevano alcune informazioni di cui avevo bisogno anche io.

Il problema principale, che non ho notato nessuno notato, è stato il mio codice HTML per includere gli script ... guarda il mio post e vedo se riesci a vedere il problema.

Stavo usando un tag <link href=... invece del tag <script src=... corretto. Totalmente colpa mia perché avevo rapidamente tagliato e incollato il collegamento CSS senza pensarci e ho appena cambiato tipo e file. Duh !!!

In ogni modo i link corretti richiesti sono:

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

Tutto funziona allora. È sicuramente necessario includere il file "MicrosoftMvcJQueryValidation.js" dal progetto futures, quindi sono stato upvoted tutti i post che lo hanno menzionato.

Fuori dalla scatola sebbene tale file NON sia incluso. Se il vostro non è preoccupato per utilizzando jQuery, allora si può semplicemente utilizzare il seguente include per utilizzare l'implementazione Microsoft che funziona out of the box con l'RC:

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

spero di poter salvare almeno una persona un po 'di dolore. .. Non riesco ancora a credere che avrei potuto rovinare l'inclusione e non averlo notato per così tanto tempo.

Grazie ancora per tutto il vostro aiuto.

2

Sei sicuro di aver incluso i file JS corretti? Perché in Phill Haack's post è stato aggiunto MicrosoftMvcJQueryValidation.js anziché MicrosoftMvcValidation.js.

si mette anche la proprietà ClientValidationFunction nella vista:

<% ViewContext.FormContext.ClientValidationFunction 
= "EnableClientValidation"; %> 

Anche se questo non era RC, ma Beta.

+1

'<% ViewContext.FormContext.ClientValidationFunction =" EnableClientValidation "; %> 'non funziona più nella RC. È ora una chiamata di funzione, vedi: 'Html.EnableClientValidation();' – Kelsey

2

Il sistema di convalida di default (e supportato solo da Microsoft) nella versione di prova di ASP.NET MVC 2 non utilizza jQuery Validate. Invece, utilizza un nuovo sistema di convalida che esiste interamente in MicrosoftMvcValidation.js (anche se è necessario includere anche MicrosoftAjax.js).

Se si desidera utilizzare la libreria jQuery Validate, questa viene inclusa come parte del progetto ASP.NET MVC Futures (disponibile here), che è un download separato e ha il proprio file di script dell'adattatore.

Inoltre, per quanto riguarda l'helper Html.ValidationSummary(), credo che debba essere incluso nel modulo se si desidera che abbia la nuova funzionalità lato client. Funzionerà ancora se è al di fuori del modulo, ma funzionerà solo sul lato server.

+0

Salve, non sono d'accordo (-1). ASP.NET MVC RC supporta (come Phill Haack ha scritto sul suo blog) qualsiasi framework di validazione lato client e server compatibile. Per il sito client è jQuery.Validate e per Lato server xVal, Castello e così via. Html.ValidationSummary() non deve essere all'interno del modulo, può essere in qualsiasi punto della pagina. – Feryt

+0

Con "supportato" intendevo "supportato da Microsoft" e la mia affermazione è corretta. L'unico provider di validazione client in-box in ASP.NET MVC 2 RC è per una nuova libreria di convalida, non per jQuery. È possibile collegare altre librerie: non sono supportate da Microsoft. – Eilon

3

È necessario includere MicrosoftMvcJQueryValidation.js di file:

<link href="MicrosoftMvcJQueryValidation.js" type="text/javascript" />

Controllare questo: Where is the right version of MicrosoftMvcJQueryValidation.js for MVC 2 beta 2?

Successivo appena messo Html.EnableClientValidation(); da qualche parte nella pagina Visualizza. È deve essere prima del primo modulo che si desidera convalidare sul lato client. Preferisco la pagina Site.Master.

Utilizzo di ASP.NET MVC 2 RC.

7

Quando si aggiorna progetto dal MVC 2 Beta, uso: /src/MvcFutures/MicrosoftMvcJQueryValidation.js da MVC 2 RC codice sorgente Package (link). La versione Beta precedente non funziona correttamente con jquery.validation in RC. file javascript necessari sono:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript" /> 
<script src="/Scripts/jquery.validate.min-vsdoc.js" type="text/javascript" /> 
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" /> 

Versione destra di MicrosoftMvcJQueryValidation.js contiene questo .ready $ (document)() funzione:

// need to wait for the document to signal that it is ready 
$(document).ready(function() { 
    var allFormOptions = window.mvcClientValidationMetadata; 
    if (allFormOptions) { 
     while (allFormOptions.length > 0) { 
      var thisFormOptions = allFormOptions.pop(); 
      __MVC_EnableClientValidation(thisFormOptions); 
     } 
    } 
}); 

alla fine del file (in versione RC).

+0

Ho scaricato e incluso questo file esattamente come è successo, ma ancora nessuna convalida sul lato client. Qualche raccomandazione su come posso diagnosticare ciò che è sbagliato? – Kelsey

+0

Prova: 1) verificare se la pagina esegue il rendering della parte JS con: ..if (! Window.mvcClientValidationMetadata) {.. in caso contrario, inserire la sequenza: <% Html.EnableClientValidation(); %> prima di BeginForm() 2) prova la funzione debug $ (document) .ready() da asnwer sopra 3) controlla se si utilizza ax .ly come descritto – Martin

Problemi correlati