2010-01-04 18 views
5

Ich kann nicht scheinen, irgendeine clientseitige Validierung zu bekommen, die an einer MVC 2 RC-App arbeitet.ASP.NET MVC 2 RC clientseitige Validierung funktioniert nicht

Mein Modell hat die folgenden:

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

Meine Ansicht hat den folgenden Code:

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

lasse ich beide Felder leer und klicken Sie auf die Schaltfläche Test, und es geht direkt auf die Post-Handler-Controller ohne Validierung der Client-Seite. Ich bin mir nicht sicher, was ich vermisse.

Ich habe folgendes Javascript auch in der Ansicht enthalten (nicht sicher, ob ich es brauche alle):

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

Alle Ideen, was ich falsch mache. Ich habe das Gefühl, dass mir etwas Einfaches fehlt und die Dokumentation für MVC 2 spärlich ist.

Edit: Ich habe den Link hinzugefügt:

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

Und ich habe die Datei in meinem Projekt enthält, das ich von auf den Links in den Antworten herunterladen musste. Es funktioniert überhaupt nicht. Irgendwelche anderen Ideen?

Edit: Ich bin mit Visual Studio 2008 mit MVC 2 RC (nicht beta) und ich bin auf der Suche für alle herunterladbaren oder geschrieben Beispiele für die clientseitige Validierung mit der RC-Version arbeiten.

Antwort

7

Ok Ich habe das herausgefunden ... und es ist 100% meine Schuld. Obwohl einige der Beiträge einige Informationen enthielten, die ich auch brauchte.

Das Hauptproblem, von dem ich überrascht bin, dass niemand bemerkte, war mein HTML, um die Drehbücher einzuschließen ... schauen Sie nach meinem Beitrag und sehen Sie, ob Sie das Problem sehen können.

Ich verwendete einen <link href=... Tag anstelle des richtigen Tags <script src=.... Total meine Schuld, weil ich schnell und ohne nachzudenken die CSS-Verbindung ausgeschnitten und eingefügt hatte und nur den Typ und die Datei geändert hatte. Duh !!!

Anyways die richtigen Links erforderlich sind:

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

Alles funktioniert dann. Sie müssen auf jeden Fall die Datei 'MicrosoftMvcJQueryValidation.js' aus dem Futures-Projekt hinzufügen, so dass ich alle Posts, die das erwähnt haben, uploot.

Out of the box obwohl diese Datei nicht enthalten ist. Wenn Ihr keine Sorgen über die Verwendung von JQuery dann können Sie nur die folgende verwenden enthält die Microsoft-Implementierung zu verwenden, die mit dem RC aus der Box funktioniert:

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

Ich hoffe, dass ich zumindest eine Person einige Trauer retten kann. .. Ich kann immer noch nicht glauben, wie ich das Include vermasselt haben könnte und es nicht sooooo lang bemerkt habe.

Nochmals vielen Dank für Ihre Hilfe.

2

Sind Sie sicher, dass Sie die richtigen JS-Dateien hinzugefügt haben? Denn in Phill Haack's post hat es anstelle MicrosoftMvcValidation.jsMicrosoftMvcJQueryValidation.js angebracht.

Er setzt auch die ClientValidationFunction Eigenschaft in der Ansicht:

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

Obwohl das nicht RC war, aber Beta.

+1

'<% ViewContext.FormContext.ClientValidationFunction =" EnableClientValidation "; %> 'funktioniert nicht mehr in der RC. Es ist jetzt ein Funktionsaufruf, siehe: 'Html.EnableClientValidation();' – Kelsey

2

Das Standardvalidierungssystem (und nur von Microsoft unterstützt) im ASP.NET MVC 2-Release-Kandidat verwendet jQuery Validate nicht. Stattdessen wird ein neues Validierungssystem verwendet, das vollständig in MicrosoftMvcValidation.js enthalten ist (Sie müssen jedoch auch MicrosoftAjax.js einschließen).

Wenn Sie die jQuery Validate-Bibliothek verwenden möchten, ist sie Bestandteil des ASP.NET MVC Futures-Projekts (verfügbar here), das separat heruntergeladen werden kann und über eine eigene Adapter-Skriptdatei verfügt.

Auch bezüglich der Html.ValidationSummary() Helfer, glaube ich, es muss in das Formular aufgenommen werden, wenn Sie möchten, dass es die neue clientseitige Funktionalität hat. Es wird immer noch funktionieren, wenn es außerhalb des Formulars ist, aber es funktioniert nur serverseitig.

+0

Hallo, ich muss widersprechen (-1). ASP.NET MVC RC unterstützt (wie Phill Haack in seinem Blog schrieb) jedes kompatible Client- und Serverseitige Validierungsframework. Für Client-Site ist dies z. B. jQuery.validate und für Server-Seite xVal, Castle und so weiter. Html.ValidationSummary() muss nicht innerhalb des Formulars sein, es kann irgendwo auf der Seite sein. – Feryt

+0

Mit "unterstützt" meinte ich "von Microsoft unterstützt" und meine Aussage ist richtig. Der einzige integrierte Clientvalidierungsanbieter in ASP.NET MVC 2 RC ist für eine neue Validierungsbibliothek, nicht für jQuery. Sie können andere Bibliotheken anschließen - sie werden nur von Microsoft nicht unterstützt. – Eilon

3

Sie müssen MicrosoftMvcJQueryValidation einschließen.js Datei:

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

prüfen dies: Where is the right version of MicrosoftMvcJQueryValidation.js for MVC 2 beta 2?

nächstes setzen nur Html.EnableClientValidation(); irgendwo auf der Seite anzeigen. Es muss vor dem ersten Formular sein, das Sie clientseitig validieren möchten. Ich bevorzuge Site.Master Seite.

Arbeiten an ASP.NET MVC 2 RC.

7

Wenn Sie Projekt von MVC 2 Beta aktualisieren, zu verwenden: /src/MvcFutures/MicrosoftMvcJQueryValidation.js von MVC 2 RC Quellcode-Paket (link). Ältere Beta-Version funktioniert nicht korrekt mit jquery.validation in RC. Notwendiges Javascript-Dateien sind:

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

Rechts-Version von MicrosoftMvcJQueryValidation.js enthält dieses $ (document) .ready() Funktion:

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

am Ende der Datei (in RC-Version).

+0

Ich habe diese Datei heruntergeladen und eingeschlossen, genau wie Sie, aber noch keine Validierung der Client-Seite. Irgendwelche Empfehlungen, wie ich diagnostizieren kann, was falsch ist? – Kelsey

+0

Versuchen Sie: 1) überprüfen, ob Seite Rendern JS Teil mit starten: ..if (! Window.mvcClientValidationMetadata) {.. wenn nicht, bitte geben Sie die Reihenfolge: <% Html.EnableClientValidation(); %> vor BeginForm() 2) try Debug $ (Dokument) .ready() -Funktion von asnwer über 3) überprüfen Sie, ob Sie axactly .js wie beschrieben verwenden – Martin

Verwandte Themen