15

Quiero tan bien como la validación del lado del cliente como la validación del lado del servidor. Me di cuenta de esto como el siguiente:Asp.Net MVC EnableClientValidation no funciona

Modelo: (El modelo tiene un DataModel (dbml), que contiene la clase de prueba)

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

controlador es nada especial.

La Vista:

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

Para que todo esto funcione añadí también referencias a los archivos 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> 

el tiempo que tiene que trabajar, pero no funciona al 100%: Lo hace valida sin actualización de página después de presionar el botón. También hace la "mitad" de Validación del lado del cliente. Solo cuando escribe texto en el cuadro de texto y luego retrocede el texto escrito. La validación del lado del cliente aparece. Pero cuando intento esto tocando entre controles no hay Validación del lado del cliente.

¿Echo de menos alguna referencia o algo? (Yo uso Asp.Net MVC 2 RTM)

Respuesta

5

Cambiar el orden de la javascript cargado ...

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

Tenía el mismo problema y esto se borran para mí ...

+0

[Aquí] (http://pastebin.com/685bHTHH) es cómo se incluye la validación en mi página. Sin embargo, la validación del cliente no funciona en absoluto, ¿ve algún problema? – Shimmy

1

Pensé que también me estaba perdiendo algo, pero sé que el complemento de validación jQuery no reacciona al mouseEnter/mouseLeave. De acuerdo con la documentación de dicho tapón en (en el plug in page - busque la sección titulada "Un par de cosas a tener en cuenta al jugar con la demo"):

que un campo se marca como no válido, la validación es perezoso: antes de enviar el formulario por primera vez, la pestaña usuario puede, a través de campos sin recibir mensajes molestos - que no le dé pinchado antes de que tuviera la oportunidad de entrar en realidad un valor correcto

supongo que es el misma regla con la validación MVC 2 del lado del cliente. No puedo estar seguro de eso porque la documentación no dice nada pero "funciona en mi máquina" :).

Fui con la ruta de validación jQuery, que es compatible con MVC Futures (tenga en cuenta que la documentación para eso es inexistente). Para usarlo, sólo tiene que reemplazar las etiquetas de script para MicrosoftAjax.js, MicrosoftMvcAjax.js y archivos MicrosoftMvcValidation.js con estas dos etiquetas:

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

sustitución de la ruta con la suya.

También encontré la necesidad de actualizar a la última versión de jquery.validate.js desde la página del desarrollador, porque aquí estamos usando una versión posterior de jQuery (1.4).

Espero que ayude.

+0

He modificado mi código con lo que describes, pero no hay mejoras. que utilizo: jQuery 1.4.2 jQuery-validar 1,7 MicrosoftMvcJQueryValidation sin versionNumber availabe. También cambié la referencia dentro del archivo .js de MicrosoftMvcJQueryValidation a /// , pero aún no hay mejoras. – Colin

1

hm ..., ya es tarde para contestar, pero intente esto:

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