web-dev-qa-db-fra.com

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

Je construis une application Web à l'aide de Visual Studio 2012. J'essaie d'ajouter le nombre de mots dans ma zone de texte. Cependant, après avoir ajouté les codes javascript et les codes html. Je reçois l'erreur comme indiqué ci-dessus.

Voici mes codes javascript

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

Codes serveur dans la page maître

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

Codes ASPX, (codes HTML)

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

Vous avez besoin d'une clé web.config pour activer le mode de validation pré-4.5.

Plus d'informations sur ValidationSettings: UnobtrusiveValidationMode:

Spécifie comment ASP.NET permet globalement aux contrôles du validateur intégrés d'utiliser du code JavaScript non intrusif pour la logique de validation côté client.

Type: UnobtrusiveValidationMode

Valeur par défaut: Aucune

Remarques: 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 la 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.

Exemple:

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

Plutôt que de désactiver une nouvelle fonctionnalité, j'ai choisi de suivre les instructions de l'erreur. Dans mon global.asax.cs, j'ai ajouté:

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

Cela provient d'un article de blog msdn qui met en évidence certains des avantages des mappages de ressources de script. Le contrôle centralisé de la livraison des fichiers de script basé sur "debug = true", EnableCDN, etc., m'a particulièrement intéressé.

169
b_levitt

Il existe au moins trois méthodes pour désactiver l'utilisation de JavaScript non intrusif pour la validation côté client:

  1. Ajoutez les éléments suivants au fichier web.config:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  2. Définissez la valeur de la propriété System.Web.UI.ValidationSettings.UnobtrusiveValidationMode static sur System.Web.UI.UnobtrusiveValidationMode.None
  3. Définissez la valeur de la propriété d'instance System.Web.UI.Page.UnobtrusiveValidationMode sur System.Web.UI.UnobtrusiveValidationMode.None

Pour désactiver la fonctionnalité par page, je préfère définir la propriété Page.UnobtrusiveValidationMode à l'aide de la directive page:

<%@ Page Language="C#" UnobtrusiveValidationMode="None" %>
90
Ryan Prechel

La validation discrète est activée par défaut dans la nouvelle version d'ASP.NET. La validation discrète a pour objectif de réduire la taille de la page en remplaçant le code JavaScript intégré pour effectuer la validation par une petite bibliothèque JavaScript utilisant jQuery.

Vous pouvez soit le désactiver en modifiant web.config pour inclure les éléments suivants:

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

Ou mieux encore, configurez-le correctement en modifiant la méthode Application_Start dans global.asax:

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

La page 399 du début d'ASP.NET 4.5.1 en C # et VB fournit une discussion sur les avantages d'une validation non intrusive et une procédure pas à pas pour la configurer.

Pour ceux qui recherchent RouteConfig. Il est ajouté automatiquement lorsque vous créez un nouveau projet dans visual studio dans le dossier App_Code. Le contenu ressemble à ceci:

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);
        }
    }
}
44
denver

ajouter un peu plus à la réponse de b_levitt ... sur 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"
            });
        }
    }
}

sur votre 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>
11
BernieSF

Je crois avoir rencontré le même dilemme. J'ai commencé à rencontrer le problème quand j'ai changé pour:

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

Ce qui donne le message d'erreur que vous décrivez ci-dessus.

ajouter:

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

Résout le problème , mais vos contrôles de validation/scripts génèrent des erreurs d'exécution Javascript. Si vous passez à:

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

Vous devriez être OK, , mais vous devrez vous assurer que le reste de votre code se comporte/se comporte comme vous le souhaitez. Vous devrez peut-être également renoncer à certaines nouvelles fonctionnalités uniquement disponibles à partir de la version 4.5.

P.S. Il est vivement recommandé de lire ce qui suit avant de mettre en œuvre cette solution. Surtout, si vous utilisez la fonctionnalité Async:

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

UPDATE Avril 2017: Après quelques essais et tests, j'ai trouvé une combinaison qui fonctionne:

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

avec:

jQuery version 1.11.3

10
DaniDev

Le problème est dû au validateur Control. Ajoutez simplement la référence J Query à votre page Web comme suit, puis ajoutez les paramètres de validation dans votre fichier web.config pour résoudre le problème. Moi aussi j'ai fait face au même problème et le ci-dessous a donné la solution à mon problème.

Étape 1:

Code to be added in web page

Étape 2:

Code to be added in Web.config file

Cela résoudra votre problème.

6
Ivan

Si votre code ou votre configuration semble correct après avoir examiné les autres réponses, j'ai également eu ce problème avec un site Web déployé (développement intermédiaire) et j'ai constaté que le problème était que le fichier Global.asax avait été renommé. (Par moi, quelques jours plus tôt lorsque vous jouez avec customErrors et Application_Error)

0
StingyJack