wake-up-neo.com

WebForms UnobtrusiveValidationMode erfordert eine ScriptResourceMapping für Jquery

In meiner Webanwendung erhalte ich folgende Fehlermeldung:

WebForms UnobtrusiveValidationMode erfordert eine ScriptResourceMapping für 'jquery'. Bitte fügen Sie ein ScriptResourceMapping mit dem Namen .__ hinzu. jquery (Groß- und Kleinschreibung beachten).

Beschreibung: Während der Ausführung von .__ ist eine nicht behandelte Ausnahme aufgetreten. die aktuelle Webanfrage. Bitte überprüfen Sie die Stack-Ablaufverfolgung auf weitere Informationen über den Fehler und den Ursprung des Codes. 

Ausnahmedetails: System.InvalidOperationException: WebForms UnobtrusiveValidationMode erfordert eine ScriptResourceMapping für 'jquery'. Bitte fügen Sie ein ScriptResourceMapping mit dem Namen .__ hinzu. jquery (Groß- und Kleinschreibung beachten).

Wie kann ich es lösen?

20
Oz Cohen

Seit .NET 4.5 verwenden die Validatoren Datenattribute und beschränktes Javascript für die Validierungsarbeit. Daher erwartet .NET, dass Sie eine Skriptreferenz für jQuery hinzufügen.

Es gibt zwei Möglichkeiten, den Fehler zu beheben:


Deaktiviere UnobtrusiveValidationMode:

Fügen Sie dies zu web.config hinzu:

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

Es funktioniert wie in früheren .NET-Versionen und fügt der Seite nur das erforderliche Javascript hinzu, damit die Validatoren funktionieren, anstatt nach dem Code in der jQuery-Datei zu suchen. Dies ist eigentlich die gängige Lösung.


Eine andere Lösung ist die Registrierung des Skripts:

Fügen Sie in Global.asax Application_Start eine Zuordnung zu Ihrem jQuery-Dateipfad hinzu:

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

Einige Details aus MSDN:

ValidationSettings: UnobtrusiveValidationMode Gibt an, wie ASP.NET ermöglicht es den integrierten Validator-Steuerelementen global, unaufdringlich zu verwenden JavaScript für clientseitige Validierungslogik.

Wenn dieser Schlüsselwert auf "None" (Standardeinstellung) gesetzt ist, wird die ASP.NET-Anwendung wird das Verhalten vor 4.5 (JavaScript-Inline in den Seiten) für .__ verwenden. clientseitige Validierungslogik.

Wenn dieser Schlüsselwert auf "WebForms" festgelegt ist, verwendet ASP.NET HTML5-Datenattribute und spät gebundenes JavaScript aus einer hinzugefügten Skriptreferenz für clientseitige Validierungslogik.

62
Jaqen H'ghar

Um dieses Problem auf bestimmten Seiten zu beheben, müssen beim Laden der Seite einige Überprüfungseinstellungen festgelegt werden. Schreiben Sie den folgenden Code in Page_Load()-Methode:

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

Seine Arbeit für mich in .NET 4.5

6
ross.zhalivtsiv

Ich denke, das ist die beste Lösung für diesen Typfehler. Bitte fügen Sie die folgende Zeile hinzu. Es funktioniert auch mein Code, wenn ich MSVS 2015 verwende.

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

2
Shafaet Hossain

Jaqen H'ghar ist genau richtig. Ein dritter Weg ist:

  1. Gehen Sie zu NuGet-Pakete verwalten
  2. Installieren Sie Microsoft.jQuery.Unobtrusive.Validation
  3. Öffnen Sie die Datei "Global.asax.cs" und fügen Sie diesen Code in die Application_Start-Methode ein

Code, der beim Start der Anwendung ausgeführt wird:

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

Die Ausnahme weist auf ein Problem mit dem unauffälligen JavaScript-Überprüfungsmodus hin. Dieses Problem ist nicht spezifisch für Sitefinity und tritt in allen ASP.NET-Standardanwendungen auf, wenn das Projekt auf .NET 4.5-Framework abzielt und die Validierung vor 4.5 nicht in der Datei web.config aktiviert ist.

Öffnen Sie die Datei web.config und stellen Sie sicher, dass in den App-Einstellungen ein ValidationSettings: UnobtrusiveValidationMode vorhanden ist: 

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

Nach der akzeptierten Antwort stieß ich auf Probleme an anderer Stelle auf meiner Website, die jQuery zusammen mit dem Migrate Plugin erfordern.

Wenn das erforderliche Mapping zu Global.asax hinzugefügt wird und beim Laden einer Seite, die eine unauffällige Überprüfung erfordert (z. B. eine Seite mit dem ChangePassword ASP - Steuerelement), steht die zugeordnete Skriptressource in Konflikt mit den bereits geladenen jQuery- und Migrationsskripts.

Das Hinzufügen des Migrate-Plugins als zweites Mapping löst das Problem:

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

Klicken Sie mit der rechten Maustaste auf Ihrer Website auf Eigenschaftsseiten und aktivieren Sie die beiden Kontrollkästchen unter Barrierefreiheit klicken Sie auf OK. die Website ausführen 

0
Prajwal Parihar