2010-01-04 17 views
5

Parece que no puedo obtener ninguna validación del lado del cliente que funcione en una aplicación MVC 2 RC.La validación del lado del cliente ASP.NET MVC 2 RC no funciona

Mi modelo tiene la siguiente:

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

Mi opinión tiene el siguiente código:

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

dejo ambos campos en blanco y haga clic en el botón de prueba y va derecho al controlador de puesto de mando sin validación del lado del cliente. No estoy seguro de lo que me estoy perdiendo.

Tengo el siguiente javascript también incluye en la vista (no estoy seguro si todo necesito):

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

Alguna idea de lo que estoy haciendo mal. Siento que me falta algo simple y la documentación para MVC 2 es escasa.

Editar: he añadido el enlace:

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

Y he incluido el archivo en mi proyecto, que tenía que descargar desde el de los eslabones de las respuestas. Todavía no funciona en absoluto. ¿Alguna otra idea?

Editar: Estoy utilizando Visual Studio 2008 con MVC 2 RC (no beta) y estoy en busca de cualquier ejemplos descargables o publicados de validación en el cliente que trabajan con la versión RC.

Respuesta

7

Ok, me di cuenta de esto ... y es 100% mi culpa. Aunque, un par de publicaciones incluían información que yo también necesitaba.

El problema principal, que estoy sorprendido de que nadie haya notado, era mi HTML para incluir las secuencias de comandos ... mira mi publicación y mira si puedes ver el problema.

Estaba usando una etiqueta <link href=... en lugar de la etiqueta adecuada <script src=.... Totalmente culpa mía porque rápidamente había cortado y pegado el enlace CSS sin pensarlo y solo había cambiado el tipo y el archivo. Duh !!!

De todas formas los enlaces correctas requeridas son:

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

Todo funciona entonces. Definitivamente es necesario incluir el archivo 'MicrosoftMvcJQueryValidation.js' del proyecto de futuros, por lo que he votado por encima de todas las publicaciones que lo mencionaron.

Fuera de la caja, aunque ese archivo NO está incluido. Si no está preocupado por el uso de jQuery a continuación, puedes utilizar la siguiente incluye utilizar la aplicación Microsoft que funcionará fuera de la caja con el 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>  

espero poder ahorrar por lo menos una persona un poco de dolor. .. Todavía no puedo creer cómo pude haber estropeado la inclusión y no me di cuenta por mucho tiempo.

Gracias de nuevo por toda su ayuda.

2

¿Estás seguro de que incluiste los archivos JS correctos? Porque en Phill Haack's post tiene MicrosoftMvcJQueryValidation.js conectado en lugar de MicrosoftMvcValidation.js.

También define la propiedad ClientValidationFunction en la vista:

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

A pesar de que no era RC, pero Beta.

+1

'<% ViewContext.FormContext.ClientValidationFunction =" EnableClientValidation "; %> 'ya no funciona en el RC. Ahora es una llamada a función, ver: 'Html.EnableClientValidation();' – Kelsey

2

El sistema de validación predeterminado (y solo compatible con Microsoft) en ASP.NET MVC 2 Release Candidate no utiliza jQuery Validate. En su lugar, utiliza un nuevo sistema de validación que existe por completo en MicrosoftMvcValidation.js (aunque también debe incluir MicrosoftAjax.js).

Si desea utilizar la biblioteca jQuery Validate, se incluye como parte del proyecto ASP.NET MVC Futures (disponible here), que es una descarga independiente y tiene su propio archivo de script de adaptador.

Además, con respecto al asistente Html.ValidationSummary(), creo que debe incluirse dentro del formulario si desea que tenga la nueva funcionalidad del lado del cliente. Todavía funcionará si está fuera del formulario, pero solo funcionará en el lado del servidor.

+0

Hola, debo estar en desacuerdo (-1). ASP.NET MVC RC admite (como escribió Phill Haack en su blog) cualquier marco de validación compatible con el cliente y el servidor. Para el sitio del cliente es, por ejemplo, jQuery.validate y para el lado del servidor xVal, Castle, etc. Html.ValidationSummary() no necesita estar dentro del formulario, puede estar en cualquier lugar de la página. – Feryt

+0

Por "compatible" quise decir "compatible con Microsoft" y mi afirmación es correcta. El único proveedor de validación de cliente incluido en la caja en ASP.NET MVC 2 RC es para una nueva biblioteca de validación, no para jQuery. Puede conectar otras bibliotecas, simplemente no son compatibles con Microsoft. – Eilon

3

Usted debe incluir MicrosoftMvcJQueryValidation.js archivo:

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

Comprobar esto: Where is the right version of MicrosoftMvcJQueryValidation.js for MVC 2 beta 2?

A continuación sólo hay que poner Html.EnableClientValidation(); en algún lugar de la página Ver. Es debe antes del primer formulario que desea validar del lado del cliente. Prefiero Sitio.Master página.

Trabajando en ASP.NET MVC 2 RC.

7

Al actualizar el proyecto de MVC Beta 2, utilice: /src/MvcFutures/MicrosoftMvcJQueryValidation.js de MVC 2 RC Fuente paquete de código (link). La versión anterior de Beta no funciona correctamente con jquery.validation en RC. archivos javascript que se necesitan son:

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

versión correcta de MicrosoftMvcJQueryValidation.js contiene este $ (document) ready() función:

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

al final del archivo (en la versión RC).

+0

He descargado e incluido este archivo exactamente como lo has hecho pero todavía no hay validación del lado del cliente. ¿Alguna recomendación sobre cómo puedo diagnosticar lo que está mal? – Kelsey

+0

Probar: 1) comprobar si la página JS parte de procesamiento comienza con: ..if (! Window.mvcClient ValuationMetadata) {.. cuando no, por favor, introduzca la secuencia: <% Html.EnableClientValidation(); %> antes de BeginForm() 2) prueba la función debug $ (document) .ready() de asnwer por encima de 3) comprueba si utilizas axactly .js como describí – Martin

Cuestiones relacionadas