web-dev-qa-db-fra.com

WebForms UnobtrusiveValidationMode requiert un ScriptResourceMapping pour jquery

Dans mon application Web, l'erreur suivante apparaît:

WebForms UnobtrusiveValidationMode requiert un ScriptResourceMapping pour 'jquery'. Veuillez ajouter un ScriptResourceMapping nommé jquery (sensible à la casse).

Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez vérifier la trace de la pile pour plus d'informations informations sur l'erreur et son origine dans le code. 

Détails des exceptions: System.InvalidOperationException: WebForms UnobtrusiveValidationMode requiert un ScriptResourceMapping pour 'jquery'. Veuillez ajouter un ScriptResourceMapping nommé jquery (sensible à la casse).

Comment puis-je le résoudre?

20
Oz Cohen

Depuis .NET 4.5, les validateurs utilisent des attributs de données et du code Javascript lié pour effectuer le travail de validation. Par conséquent, .NET s'attend à ce que vous ajoutiez une référence de script pour jQuery.

Il y a deux manières possibles de résoudre l'erreur:


Désactiver UnobtrusiveValidationMode:

Ajoutez ceci à web.config:

<configuration>
    <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>
</configuration>

Cela fonctionnera comme dans les versions précédentes de .NET et ajoutera simplement le code Javascript nécessaire à votre page pour que les validateurs fonctionnent, au lieu de rechercher le code dans votre fichier jQuery. C'est la solution commune en fait.


Une autre solution consiste à enregistrer le script:

Dans Global.asax Application_Start, ajoutez un mappage à votre chemin de fichier jQuery:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery", 
    new ScriptResourceDefinition
    {
        Path = "~/scripts/jquery-1.7.2.min.js",
        DebugPath = "~/scripts/jquery-1.7.2.min.js",
        CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.1.min.js",
        CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.1.js"
    });
}

Quelques détails de MSDN:

ValidationSettings: UnobtrusiveValidationMode Spécifie comment ASP.NET permet globalement aux contrôles du validateur intégrés d’utiliser discrètement JavaScript pour la logique de validation côté client.

Si cette valeur de clé est définie sur "Aucune" [valeur par défaut], l'application ASP.NET utilisera le comportement antérieur à la version 4.5 (JavaScript intégré dans les pages) pour logique de validation côté client.

Si cette valeur de clé est définie sur "WebForms", ASP.NET utilise des attributs de données HTML5 et du code JavaScript lié tardivement à partir d'une référence de script ajoutée pour la logique de validation côté client.

62
Jaqen H'ghar

Pour résoudre ce problème sur une page spécifique, vous devez définir certains paramètres de validation lors du chargement de la page. Écrivez le code ci-dessous dans la méthode Page_Load():

protected void Page_Load(object sender, EventArgs e)
    {
        ValidationSettings.UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
    }

Son travail pour moi dans .NET 4.5

6
ross.zhalivtsiv

Je pense que c'est la meilleure solution pour ce type d'erreur. Alors s'il vous plaît ajouter la ligne ci-dessous. En outre, cela fonctionne mon code lorsque j'utilise MSVS 2015.

<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
</configuration>

2
Shafaet Hossain

Jaqen H'ghar est sur place. Une troisième façon est de:

  1. Allez à gérer les paquets NuGet
  2. Installez Microsoft.jQuery.Unobtrusive.Validation
  3. Ouvrez le fichier Global.asax.cs et ajoutez ce code dans la méthode Application_Start

Code qui s'exécute au démarrage de l'application:

ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition {
    Path = "~/Scripts/jquery.validate.unobtrusive.min.js",
    DebugPath = "~/Scripts/jquery.validate.unobtrusive.min.js"
});
2

L'exception indique un problème avec le mode de validation JavaScript non intrusif. Ce problème n'est pas spécifique à Sitefinity et se produit dans toutes les applications ASP.NET standard lorsque le projet cible l'infrastructure .NET 4.5 et que la validation antérieure à la version 4.5 n'est pas activée dans le fichier web.config.

Ouvrez le fichier web.config et assurez-vous qu’il existe un ValidationSettings: UnobtrusiveValidationMode dans les paramètres de l’application: 

<appSettings>
  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
0
Noor

Suite à la réponse acceptée, j'ai rencontré des problèmes de code ailleurs sur mon site nécessitant jQuery avec le plug-in Migrate .

Lorsque le mappage requis est ajouté à Global.asax, lors du chargement d'une page nécessitant une validation non intrusive (par exemple une page avec le contrôle ChangePassword ASP), la ressource de script mappée entre en conflit avec les scripts jQuery et migrate déjà chargés.

L'ajout du plugin migrate en tant que deuxième mappage résout le problème:

// required for UnobtrusiveValidationMode introduced since ASP.NET 4.5
var jQueryScriptDefinition = new ScriptResourceDefinition
{
    Path = "~/Plugins/Common/jquery-3.3.1.min.js", DebugPath = "~/Plugins/Common/jquery-3.3.1.js", LoadSuccessExpression = "typeof(window.jQuery) !== 'undefined'"
};
var jQueryMigrateScriptDefinition = new ScriptResourceDefinition
{
    Path = "~/Plugins/Common/jquery-migrate-3.0.1.min.js", DebugPath = "~/Plugins/Common/jquery-migrate-3.0.1.js", LoadSuccessExpression = "typeof(window.jQuery) !== 'undefined'"
};
ScriptManager.ScriptResourceMapping.AddDefinition("jquery", jQueryScriptDefinition);
ScriptManager.ScriptResourceMapping.AddDefinition("jquery", jQueryMigrateScriptDefinition);
0
Eddie Green

Cliquez avec le bouton droit de la souris sur votre site Web, accédez à pages de propriétés et cochez les deux cases situées sous Validation d'accessibilité cliquez sur ok. exécuter le site. 

0
Prajwal Parihar