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

305

Ich erstelle eine Webanwendung mit Visual Studio 2012. Ich versuche, die Wortanzahl in mein Textfeld einzufügen. Nach dem Hinzufügen der Javascript-Codes und der HTML-Codes. Ich erhalte den Fehler wie oben angegeben.

Hier sind meine Javascript-Codierungen

Code:

function validateLimit(obj, divID, maxchar) {

objDiv = get_object(divID);

if (this.id) obj = this;

var remaningChar = maxchar - trimEnter(obj.value).length;

if (objDiv.id) {
    objDiv.innerHTML = remaningChar + " characters left";
}
if (remaningChar <= 0) {
    obj.value = obj.value.substring(maxchar, 0);
    if (objDiv.id) {
        objDiv.innerHTML = "0 characters left";
    }
    return false;
}
else
{ return true; }
}

function get_object(id) {
var object = null;
if (document.layers) {
    object = document.layers[id];
} else if (document.all) {
    object = document.all[id];
} else if (document.getElementById) {
    object = document.getElementById(id);
}
return object;
}

function trimEnter(dataStr) {
return dataStr.replace(/(\r\n|\r|\n)/g, "");
}

Servercodes auf der Masterseite

<script type="text/javascript" src="js/JScript.js" ></script>

ASPX-Codes (HTML-Codes)

<tr>
<th style="width: 595px; height: 135px;">Official Report :</th>
<td colspan="4" style="height: 135px">
  <asp:TextBox ID="tbofficial" runat="server" Height="121px" TextMode="MultiLine" Width="878px" MaxLength="500"   ToolTip="Summary:(500 characters)" onkeyup="return validateLimit(this, 'lblMsg1', 500)" ></asp:TextBox>
  <div id="lblMsg1">500 characters left</div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
        ControlToValidate="tbofficial" Display="Dynamic" 
        SetFocusOnError="True">*</asp:RequiredFieldValidator>
  <br />
  <asp:Label ID="lblmsg" runat="server"></asp:Label>
  <br />
  <br />
        <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
  <asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" />
        </td>
</tr>
Teo Chuen Wei Bryan
quelle

Antworten:

576

Sie benötigen einen web.config-Schlüssel, um den Validierungsmodus vor 4.5 zu aktivieren.

Weitere Informationen zu ValidationSettings: UnobtrusiveValidationMode :

Gibt an, wie ASP.NET es den integrierten Validator-Steuerelementen global ermöglicht, unauffälliges JavaScript für die clientseitige Validierungslogik zu verwenden.

Typ: UnobtrusiveValidationMode

Standardwert: Keine

Hinweise: Wenn dieser Schlüsselwert auf "Keine" [Standard] festgelegt ist, verwendet die ASP.NET-Anwendung das Verhalten vor 4.5 (JavaScript inline auf den Seiten) für die 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 die clientseitige Validierungslogik.

Beispiel:

    <appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>
ericdc
quelle
14
Warum ist das überhaupt ein Problem ... Warum konnte dies nicht einfach standardmäßig deaktiviert werden? Wer würde das schon einmal aktivieren wollen? Was auch immer die Antworten sein
mögen
40
Es scheint, dass "Keine" nicht die Standardeinstellung ist, wenn Sie verwenden targetFramework="4.5". Ich musste diese Einstellung explizit zu meiner web.config hinzufügen, damit sie funktioniert.
Jesse Webb
18
Erinnerung: Das übergeordnete Element <appSettings> in der Datei web.Config sollte das Stammelement sein, dh <configuration>.
GY
4
Ich habe .Net 4.5.2 installiert und bin dann auf dieses Problem gestoßen. Ich gehe davon aus, dass das Windows Update für 4.5.2 die Maschinenkonfiguration geändert hat.
Rez.Net
3
Warum sollten Sie die unauffällige Validierung deaktivieren, wenn Sie nicht versuchen, einen Wettbewerb mit der größten Seitengröße zu gewinnen?
EKW
173

Anstatt eine neue Funktion zu deaktivieren, habe ich mich dafür entschieden, den Anweisungen des Fehlers zu folgen. In meiner global.asax.cs habe ich hinzugefügt:

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

Dies stammt aus einem msdn-Blogbeitrag, in dem einige der Vorteile von Skriptressourcenzuordnungen hervorgehoben werden. Von besonderem Interesse für mich war die zentralisierte Kontrolle über die Bereitstellung der Skriptdateien basierend auf "debug = true", EnableCDN usw.

b_levitt
quelle
@b_levitt Ich bin ein bisschen neu in .NET und habe die von Ihnen erwähnte Lösung durchlaufen. Es hat zwar sehr geholfen, aber nur neugierig, wie ich die jQuery-Funktion aufrufen kann. Zum Beispiel habe ich ein jQuery-Menü und nach der Implementierung der obigen Methode verwende ich <script type='text/javascript'> //<![CDATA[ $(document).ready(function () { $("#menu").menu(); }) //]] </script>. Ist das der richtige Ansatz?
Yashman Gupta
8
Erstellt einen Kern: gist.github.com/monoman/ca42e54cdac25ef2284b verbessert, indem der jQueryVer-Wert nicht fest codiert wird;
Monoman
6
HINWEIS: Ich habe diese beiden Nuget-Pakete hinzugefügt und alles lief reibungslos. musste neue Dateien im Ordner / bin auf den Produktionsserver kopieren . nuget.org/packages/Microsoft.AspNet.Web.Optimization nuget.org/packages/AspNet.ScriptManager.jQuery
htm11h
1
Hängt von Ihrem Anwendungsfall ab, welcher richtig ist. Unsere App hat keinerlei Validierung (reine Inhaltsübermittlung) und wir haben es vorgezogen, alles auszuschalten.
Samantha Branham
93

Es gibt mindestens drei Möglichkeiten, die Verwendung von unauffälligem JavaScript für die clientseitige Validierung zu deaktivieren:

  1. Fügen Sie der Datei web.config Folgendes hinzu:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  2. Setzen Sie den Wert der System.Web.UI.ValidationSettings.UnobtrusiveValidationModestatischen Eigenschaft aufSystem.Web.UI.UnobtrusiveValidationMode.None
  3. Setzen Sie den Wert der System.Web.UI.Page.UnobtrusiveValidationModeInstanzeigenschaft aufSystem.Web.UI.UnobtrusiveValidationMode.None

Um die Funktionalität pro Seite zu deaktivieren, ziehe ich es vor, die Page.UnobtrusiveValidationModeEigenschaft mithilfe der Seitenanweisung festzulegen:

<%@ Page Language="C#" UnobtrusiveValidationMode="None" %>
Ryan Prechel
quelle
7
Netter Anruf bei der Einstellung pro Seite.
Brendan Hannemann
47

Die unauffällige Validierung ist in der neuen Version von ASP.NET standardmäßig aktiviert. Die unauffällige Validierung zielt darauf ab, die Seitengröße zu verringern, indem das Inline-JavaScript für die Validierung durch eine kleine JavaScript-Bibliothek ersetzt wird, die jQuery verwendet.

Sie können es entweder deaktivieren, indem Sie web.config so bearbeiten, dass es Folgendes enthält:

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

Oder besser noch richtig konfigurieren, indem Sie die Application_Start-Methode in global.asax ändern:

void Application_Start(object sender, EventArgs e) 
{
    RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery",
        new ScriptResourceDefinition
        {
            Path = "/~Scripts/jquery-2.1.1.min.js"
        }
    );
}

Seite 399 von Beginn von ASP.NET 4.5.1 in C # und VB enthält eine Diskussion über die Vorteile einer unauffälligen Validierung und eine exemplarische Vorgehensweise für die Konfiguration.

Für diejenigen, die RouteConfig suchen. Es wird automatisch hinzugefügt, wenn Sie ein neues Projekt in Visual Studio zum Ordner App_Code erstellen. Der Inhalt sieht ungefähr so ​​aus:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;

namespace @default
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);
        }
    }
}
Denver
quelle
Woher kommt RouteConfig?
Lucas
@Lucas Wenn Sie ein neues Projekt mit Visual Studio erstellen, wird RouteConfig.cs zum Ordner App_Code hinzugefügt. Siehe bearbeitete Antwort.
Denver
12

um der Antwort von b_levitt etwas mehr hinzuzufügen ... auf global.asax:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.UI;

namespace LoginPage
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            string JQueryVer = "1.11.3";
            ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
            {
                Path = "~/js/jquery-" + JQueryVer + ".min.js",
                DebugPath = "~/js/jquery-" + JQueryVer + ".js",
                CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
                CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
                CdnSupportsSecureConnection = true,
                LoadSuccessExpression = "window.jQuery"
            });
        }
    }
}

auf Ihrer default.aspx

<body>
   <form id="UserSectionForm" runat="server">
     <asp:ScriptManager ID="ScriptManager" runat="server">
          <Scripts>
               <asp:ScriptReference Name="jquery" />
          </Scripts>
     </asp:ScriptManager>
     <%--rest of your markup goes here--%>         
   </form>
</body>
BernieSF
quelle
12

Ich glaube, ich bin auf dasselbe Dilemma gestoßen. Das Problem trat auf, als ich zu Folgendem wechselte:

</system.web>
<httpRuntime targetFramework="4.5"/>

Welches gibt die Fehlermeldung, die Sie oben beschreiben.

Hinzufügen:

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

Behebt das Problem, führt dann jedoch dazu, dass Ihre Validierungssteuerelemente / -skripte Javascript-Laufzeitfehler auslösen. Wenn Sie zu:

</system.web>
<httpRuntime targetFramework="4.0"/>

Sie sollten in Ordnung sein, aber Sie müssen sicherstellen, dass der Rest Ihres Codes wie gewünscht funktioniert / sich verhält. Möglicherweise müssen Sie auch auf einige neue Funktionen verzichten, die erst ab Version 4.5 verfügbar sind.

PS Es wird dringend empfohlen, vor der Implementierung dieser Lösung Folgendes zu lesen. Insbesondere, wenn Sie die Async-Funktionalität verwenden:

https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/

UPDATE April 2017: Nach einigen Experimenten und Tests habe ich eine Kombination gefunden, die funktioniert:

<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
<httpRuntime targetFramework="4.5.1" />

mit:

jQuery Version 1.11.3

DaniDev
quelle
6

Das Problem trat aufgrund des Control-Validators auf. Fügen Sie einfach den J Query-Verweis wie folgt zu Ihrer Webseite hinzu und fügen Sie dann die Validierungseinstellungen in Ihre web.config-Datei ein, um das Problem zu beheben. Auch ich hatte das gleiche Problem und das Folgende gab die Lösung für mein Problem.

Schritt 1:

Code, der auf der Webseite hinzugefügt werden soll

Schritt 2 :

Code, der in die Datei Web.config eingefügt werden soll

Es wird Ihr Problem lösen.

Ivan
quelle
Warum sollten Sie Jquery hinzufügen, nachdem Sie UnobtrusiveValidationMode auf none gesetzt haben?
Ashin
0

Es gibt 3 Lösungen, die andere Leute oben angegeben haben ... aber wenn Sie die Application_Start-Lösung ausprobieren, funktioniert meine andere jQuery-Bibliothek wie Pickup_Date_and_Time nicht ... also teste ich den zweiten Weg und es wird geantwortet: 1- Setzen Sie den Target FrameWork auf Pre 4.5 2 - Verwenden Sie "UnobtrusiveValidationMode =" None "" in Ihrem Seitenkopf =>

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Master/MasteOfHotel.Master" 
    UnobtrusiveValidationMode="None" %>

Es funktioniert für mich und stört meine andere jQuery-Funktion nicht.

Ata Hoseini
quelle