Validación no intrusiva de ASP.Net 2012 con jQuery

Estaba jugando con Visual Studio 2012 y creé una aplicación web ASP.Net vacía , cuando traté de agregar los controles de validador tradicionales a una nueva página, aparece este error:

WebForms UnobtrusiveValidationMode requiere un ScriptResourceMapping para ‘jquery’. Agregue un ScriptResourceMapping llamado jquery (sensible a mayúsculas y minúsculas).

¿Cuáles son los pasos para arreglarlo?

Este es el marcado de mi página:

 

Parece que hay mucha información incorrecta sobre ValidationSettings: UnobtrusiveValidationMode value. Para deshabilitarlo , debe hacer lo siguiente.

  

La palabra None, not WebForms debe usarse para deshabilitar esta característica.

Esta es la respuesta oficial de Microsoft de los foros de MS Connect . Estoy copiando el texto relevante a continuación:

Cuando se apunta a .NET 4.5, la validación no intrusiva está habilitada de forma predeterminada. Necesitas tener jQuery en tu proyecto y tener algo como esto en Global.asax para registrar jQuery correctamente:

 ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition { Path = "~/scripts/jquery-1.4.1.min.js", DebugPath = "~/scripts/jquery-1.4.1.js", CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.min.js", CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.js" }); 

Reemplazar la versión de jQuery con la versión que está utilizando.

También puede desactivar esta nueva función en web.config eliminando la siguiente línea:

  

Más información sobre ValidationSettings: UnobtrusiveValidationMode

Especifica cómo ASP.NET permite globalmente que los controles del validador incorporados utilicen JavaScript discreto para la lógica de validación del lado del cliente.

Tipo: Modalidad de validación no intrusiva

Valor predeterminado: ninguno

Observaciones: si este valor de clave se establece en “Ninguno” [predeterminado], la aplicación ASP.NET usará el comportamiento previo a 4.5 (JavaScript en línea en las páginas) para la lógica de validación del lado del cliente. Si este valor de clave se establece en “WebForms” , ASP.NET utiliza atributos de datos HTML5 y JavaScript enlazado tarde desde una referencia de script añadida para la lógica de validación del lado del cliente.

Ejemplo:

     

Además de la requerida “jquery” ScriptResourceDefinition en Global.asax (use sus propias rutas):

  protected void Application_Start(object sender, EventArgs e) { ScriptManager.ScriptResourceMapping.AddDefinition( "jquery", new ScriptResourceDefinition { Path = "/static/scripts/jquery-1.8.3.min.js", DebugPath = "/static/scripts/jquery-1.8.3.js", CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js", CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.js", CdnSupportsSecureConnection = true, LoadSuccessExpression = "jQuery" }); } 

Además, solo necesita agregar explícitamente “WebUIValidation.js” después deScriptReferenceScriptReference en ScriptManager (la parte más importante):

        

Si lo agrega antes de “jquery”, o si no agrega uno o ninguno de los dos ( ASP.Net lo agregará automáticamente antes de “jquery”), la validación del cliente se romperá por completo:

http://connect.microsoft.com/VisualStudio/feedback/details/748064/unobtrusive-validation-breaks-with-a-script-manager-on-the-page

No necesita ninguno de esos paquetes NuGet en absoluto, ni ningún ScriptReference adicional (algunos de los cuales son solo duplicados, o incluso un ScriptReference completamente innecesario, ya que ASP.Net agrega automáticamente si es necesario) mencionados en su blog.

EDITAR: no es necesario que agregue explícitamente “WebForms.js” también (lo eliminó del ejemplo) – y si lo hace, su LoadSuccessExpression será ignorado por alguna razón

Agregue una referencia a Microsoft.JScript en su aplicación en su web.config como se muestra a continuación:

              

Todo el error del validador ha sido resuelto por este

    

El error debe desaparecer, disfrutar …

Simplemente copie y pegue cualquier archivo JQuery en su proyecto y agregue un archivo Global.asax y modifíquelo de la siguiente manera:

Solo pego el archivo JQuery en mi proyecto y agrego una referencia en el archivo Global.asax:

 protected void Application_Start(object sender, EventArgs e) { ScriptManager.ScriptResourceMapping.AddDefinition( "jquery", new ScriptResourceDefinition { Path = "~/jquery-1.10.2.js", DebugPath = "~/jquery-1.10.2.js", CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.2.min.js", CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.10.2.js", CdnSupportsSecureConnection = true, LoadSuccessExpression = "jQuery" }); } 

En el Administrador de paquetes de Nuget, busque AspNet.ScriptManager.jQuery en lugar de jquery. De esta manera, no tendrá que establecer las asignaciones usted mismo y el proyecto funcionará con el clic de una instalación simple.

O deshabilite la validación discreta agregando esta línea a la etiqueta de configuración del archivo web.config en el proyecto.

   

En el “archivo de configuración” en cambio estas líneas:

   

por estas líneas:

   

Este error porque en la biblioteca de la versión 4.0 pertenecen a “asp: RequiredFieldValidator” existe pero en la biblioteca de la versión 4.5 no existe, por lo que debe agregar la biblioteca por su cuenta

  

esta línea no estaba en mi WebConfig así que: Resolví esto simplemente degradando la versión .Net de destino a 4.0 🙂

en Visual Studio 2012 en web.config cambie el targetFramework = 4.5 a targetFramework = 4.0

Sugiero a cambio estas líneas

 

por esta linea