web-dev-qa-db-ja.com

WebForms UnobtrusiveValidationModeにはjqueryのScriptResourceMappingが必要です

私のWebアプリケーションでは、次のエラーが表示されます。

WebForms UnobtrusiveValidationModeでは、「jquery」のScriptResourceMappingが必要です。 jquery(case-sensitive)という名前のScriptResourceMappingを追加してください。

説明:現在のWeb要求の実行中に未処理の例外が発生しました。エラーの詳細およびコードのどこで発生したかについては、スタックトレースを確認してください。

例外の詳細:System.InvalidOperationException:WebForms UnobtrusiveValidationModeでは、「jquery」のScriptResourceMappingが必要です。 jquery(case-sensitive)という名前のScriptResourceMappingを追加してください。

どうすれば解決できますか?

20
Oz Cohen

.NET 4.5以降、バリデーターは検証作業を行うためにデータ属性とバウンドJavascriptを使用するため、.NETはjQueryのスクリプト参照を追加することを期待しています。

エラーを解決する方法は2つあります


UnobtrusiveValidationModeを無効にします:

これをweb.configに追加します。

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

以前の.NETバージョンで機能していたように機能し、jQueryファイル内のコードを探す代わりに、必要なJavascriptをページに追加してバリデーターを機能させるだけです。これが実際の一般的なソリューションです。


別の解決策は、スクリプトを登録することです:

Global.asax Application_Startで、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"
    });
}

MSDNからの詳細:

ValidationSettings:UnobtrusiveValidationMode ASP.NETがクライアント側の検証ロジックに控えめなJavaScriptを使用するために、組み込みの検証コントロールをグローバルに有効にする方法を指定します。

このキー値が「なし」に設定されている場合[デフォルト]、ASP.NETアプリケーションはクライアント側の検証ロジックに4.5より前の動作(ページ内のJavaScriptインライン)を使用します。

このキー値が「WebForms」に設定されている場合、ASP.NETは、クライアント側の検証ロジック用に追加されたスクリプト参照からHTML5データ属性と遅延バインドJavaScriptを使用します。

71
Jaqen H'ghar

特定のページでこの問題を修正するには、ページの読み込み時にいくつかの検証設定を設定する必要があります。 Page_Load()メソッドで以下のコードを記述します。

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

.NET 4.5での私の仕事

6
ross.zhalivtsiv

これがこのタイプのエラーの最善の解決策だと思います。以下の行を追加してください。また、MSVS 2015を使用しているときにコードが機能します。

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

2
shafaetjsr

Jaqen H'gharはまさにその存在です。 3番目の方法は次のとおりです。

  1. NuGetパッケージの管理に移動します
  2. Microsoft.jQuery.Unobtrusive.Validationをインストールします
  3. Global.asax.csファイルを開き、Application_Startメソッド内にこのコードを追加します

アプリケーションの起動時に実行されるコード:

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

例外は、控えめなJavaScript検証モードに問題があることを示しています。この問題はSitefinity固有のものではなく、プロジェクトが.NET 4.5フレームワークをターゲットとし、web.configファイルで4.5より前の検証が有効になっていない場合、標準ASP.NETアプリケーションで発生します。

Web.configファイルを開き、アプリの設定にValidationSettings:UnobtrusiveValidationModeがあることを確認します。

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

受け入れられた答えに加えて、jQueryと Migrate Plugin を必要とするサイトの他の場所のコードの問題に遭遇しました。

控えめな検証が必要なページ(たとえば、ChangePassword ASPコントロールを持つページ)を読み込むときに、必要なマッピングがGlobal.asaxに追加されると、マップされたスクリプトリソースは既に読み込まれたjQueryおよび移行スクリプトと競合します。

移行プラグインを2番目のマッピングとして追加すると、問題が解決します。

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

Webサイトを右クリックしてプロパティページに移動し、アクセシビリティ検証の下の両方のチェックボックスをオンにします。[OK]をクリックします。ウェブサイトを実行します。

0
Prajwal Parihar