15

Ich möchte sowie Client Side Validation als Server Side Validation. Ich erkennen dies wie folgt:Asp.Net MVC EnableClientValidation funktioniert nicht

Modell: (Das Modell hat ein Datamodel (dbml), die enthält die Test-Klasse)

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 ist nichts Besonderes.

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

Um diese alle Arbeiten zu machen Ich habe auch Verweise auf js Dateien:

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

Schließlich hat es funktioniert, aber es funktioniert nicht 100% funktionieren: Es tut Bestätigt nach dem Drücken der Taste, dass keine Seite aktualisiert wird. Es macht auch "halb" Client Side Validation. Nur wenn Sie Text in das Textfeld eingeben und dann den eingegebenen Text zurücksetzen. Die clientseitige Validierung wird angezeigt. Aber wenn ich dies versuche, indem ich zwischen den Steuerelementen tippe, gibt es keine Client Side Validation.

Vermisse ich eine Referenz oder etwas? (Ich benutze Asp.Net MVC 2 RTM)

Antwort

5

Ändern der Reihenfolge der geladenen javascript ...

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

Hatte genau das gleiche Problem, und dies kann klären auf für mich ...

+0

[Hier] (http://pastebin.com/685bHTHH) ist, wie die Validierung in meiner Seite enthalten ist. Die Client-Validierung funktioniert jedoch überhaupt nicht. Sehen Sie ein Problem? – Shimmy

1

Ich dachte, dass ich auch etwas vermisst habe, aber ich weiß, dass der jQuery-Validierungs-Plug-In nicht auf Mauseingabe/Maussperre reagiert. Gemäß der Dokumentation für die Plug-in (am plug in page - suchen Sie nach dem Abschnitt „Ein paar Dinge zu suchen, wenn sie mit der Demo spielt um“ gekennzeichnet):

Vor einem Feld wird als ungültig markiert, die Validierung ist faul: die Form zum ersten Mal, die Dose Registerkarte Benutzer durch die Felder ohne störende Nachrichten bekommen vor dem Absenden - er nicht abgehört wird erhalten, bevor er die Chance hatte geben tatsächlich einen korrekten Wert

ich nehme an, es ist die gleiche Regel mit MVC 2 clientseitiger Validierung. Ich kann mir da nicht sicher sein, denn die Dokumentation sagt nichts als "es funktioniert auf meinem Rechner" :).

Ich ging mit der jQuery-Validierungsroute, die in MVC Futures unterstützt wird (beachten Sie, dass die Dokumentation dafür nicht vorhanden ist). Um es zu nutzen, müssen Sie nur die Script-Tags für MicrosoftAjax.js, MicrosoftMvcAjax.js und MicrosoftMvcValidation.js Dateien mit diesen beiden Tags ersetzen:

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

ersetzt den Weg mit Ihnen.

Ich fand auch die Notwendigkeit, auf der Entwickler-Seite auf die neueste Version von jquery.validate.js zu aktualisieren, weil wir hier eine spätere Version von jQuery (1.4) verwenden.

Hoffe, dass hilft.

+0

Ich änderte meinen Code mit dem, was Sie beschreiben, aber keine Verbesserungen. Ich verwende: jQuery 1.4.2 jQuery-validate 1.7 MicrosoftMvcJQueryValidation keine Versionsnummer verfügbar. Ich habe auch den Verweis in der MicrosoftMvcJQueryValidation .js-Datei in /// geändert, aber immer noch keine Verbesserungen. – Colin

1

hm ..., dann ist es zu spät, dies zu beantworten, aber versuchen:

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