2011-01-16 15 views
8

Estoy usando MVC3 con Razor.
he incluido lo siguiente en mi _Layout.cshtml:MVC3 Validación del lado del cliente no funciona

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> 

Mi forma se parece a:

@{ 
     ViewBag.Title = "Register"; 
     Html.EnableClientValidation(); 
    } 
    @using (Html.BeginForm("Register")) 
    { 
     <fieldset> 
     <p> 
      @Html.LabelFor(o => o.Email) 
      @Html.TextBoxFor(o => o.Email) 
      @Html.ValidationMessageFor(o => o.Email) 
     </p> 
    ... 
</fieldset> 
} 

Mi modelo de vista tiene DataAnnotations (e implementa IValidatableObject), y se valida durante el controlador acción. Sin embargo, parece que no puedo usar la validación de JS en el cliente sin publicar el formulario.

¿Qué me estoy perdiendo?

Respuesta

27

En ASP.NET MVC 3 la validación plugin de jQuery es el valor predeterminado para la validación del lado del cliente. Por lo tanto, puede eliminar todos los scripts Microsoft*.js de su proyecto. Sólo es necesario lo siguiente:

<script src="@Url.Content("~/Scripts/jquery-1.4.4.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

y eliminar la llamada Html.EnableClientValidation();. La validación del cliente está habilitada en web.config:

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 
+0

Lo hice. Todavía no pasó nada. ¿Debe ocurrir la validación en cada golpe de teclado? O cuando el cuadro de texto pierde el foco? ¿Deberían los campos vacíos con los atributos requeridos ser inválidos cuando cargue el formulario? – TDaver

+1

@TDaver, la validación del cliente por defecto ocurre cuando la entrada pierde el foco o cuando intenta enviar el formulario. –

1

Elimina Html.EnableClientValidation(); y Goto su configuración web, y asegúrese de que tiene una appSetting que se ve como el siguiente:

<add key="ClientValidationEnabled" value="true"/> 
1

Intente agregar las siguientes líneas a su vista.

HtmlHelper.ClientValidationEnabled = true; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

Junto con la inclusión de jquery-1.4.4.js, jquery.validate.js, jquery.validate.unobtrusive.js

consigo que funcione para mi aplicación, pero parece que no entran en juego hasta que puse un mal valor. Por ejemplo

[Required(ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRequired")] 
     [Range(1, Int32.MaxValue, ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRange")] 
     public int? TestCountThreshold { get; set; } 

entonces puse en un 0 en el front-end y después de que la validación del lado del cliente funciona a la perfección. Me gustaría que la validación funcione para los cuadros de texto iniciales en blanco ... Parece incorrecto que la validación espere hasta que se intente con un valor incorrecto.

Cuestiones relacionadas