56 votes

Validation discrète d'ASP.Net 2012 avec jQuery

Je jouais avec Visual Studio 2012 et j'ai créé une Application Web ASP.Net vide lorsque j'ai essayé d'ajouter le contrôles traditionnels du validateur à une nouvelle page, cette erreur se produit :

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

Quelles sont les étapes à suivre pour y remédier ?

Voici le balisage de ma page :

<asp:Panel runat="server" ID="pnlUsername" GroupingText="Username settings">
    <div>
        <asp:Label ID="usernameLabel" Text="Please enter your username" runat="server" AssociatedControlID="username" />
    </div>
    <div>
        <asp:TextBox runat="server" ID="username" />
        <asp:RequiredFieldValidator ErrorMessage="The username is required" ControlToValidate="username" runat="server" Text=" - Required" />
    </div>
</asp:Panel>

56voto

rlamoni Points 501

Il semble qu'il y ait beaucoup d'informations incorrectes concernant la valeur ValidationSettings:UnobtrusiveValidationMode. Pour Désactiver vous devez procéder comme suit.

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

Le mot None, et non WebForms, doit être utilisé pour désactiver cette fonctionnalité.

30voto

InSane Points 7832

C'est le Réponse officielle de Microsoft sur les forums MS Connect . J'ai copié le texte correspondant ci-dessous.

Lorsque vous utilisez .NET 4.5, la validation non intrusive est activée par défaut. Vous devez avoir jQuery dans votre projet et avoir quelque chose comme ceci dans Global.asax pour enregistrer jQuery correctement :

ScriptManager.ScriptResourceMapping.AddDefinition("jquery", 
    new ScriptResourceDefinition {
        Path = "~/scripts/jquery-1.4.1.min.js",
        DebugPath = "~/scripts/jquery-1.4.1.js",
        CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.min.js",
        CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1.js"
    });

Remplacer la version de jQuery par la version que vous utilisez.

Vous pouvez également désactiver cette nouvelle fonctionnalité dans web.config en supprimant la ligne suivante :

<add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />

26voto

Kapil Khandelwal Points 9909

Plus d'informations sur Paramètres de validation : UnobtrusiveValidationMode

Spécifie comment ASP.NET permet globalement aux contrôles de validateurs intégrés d'utiliser le JavaScript discret pour la logique de validation côté client.

Type : UnobtrusiveValidationMode

Valeur par défaut : Aucun

Remarques : Si la valeur de cette clé est fixée à "Aucun" [par défaut], l'application ASP.NET utilisera l'option suivante le comportement pré-4.5 (JavaScript en ligne dans les pages) pour la logique de validation côté client. Si la valeur de cette clé est définie sur "WebForms" ASP.NET utilise Attributs de données HTML5 et JavaScript lié tardivement grâce à l'ajout d'une référence script. pour la logique de validation côté client.

Exemple :

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

17voto

Nikola Bogdanović Points 1628

Autre que le "jquery" obligatoire ScriptResourceDefinition (utilisez vos propres chemins) :

    protected void Application_Start(object sender, EventArgs e)
    {            
        ScriptManager.ScriptResourceMapping.AddDefinition(
            "jquery",
            new ScriptResourceDefinition
            {
                Path = "/static/scripts/jquery-1.8.3.min.js",
                DebugPath = "/static/scripts/jquery-1.8.3.js",
                CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js",
                CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.js",
                CdnSupportsSecureConnection = true,
                LoadSuccessExpression = "jQuery"
            });
    }

vous n'avez plus qu'à ajouter explicitement WebUIValidation.js après "jquery" ScriptReference en ScriptManager (la partie la plus importante) :

       <asp:ScriptManager ID="script" runat="server" EnableScriptGlobalization="True" EnableCdn="True">
            <Scripts>
                <asp:ScriptReference Name="jquery" />
                <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" />
            </Scripts>
        </asp:ScriptManager>

Si vous l'ajoutez avant "jquery", ou si vous n'ajoutez aucun ou les deux ( ASP.Net l'ajoutera alors automatiquement avant "jquery") - la validation du client sera complètement rompue :

http://connect.microsoft.com/VisualStudio/feedback/details/748064/unobtrusive-validation-breaks-with-a-script sur la page

Vous n'avez besoin d'aucun de ces paquets nuget, ni de ces paquets inutiles. ScriptReference (dont certains ne sont que des doublons, ou même un gonflement complet - ils sont ajoutés automatiquement par ASP.Net si nécessaire) dans votre blog.

EDITAR: vous n'avez pas besoin d'ajouter explicitement WebForms.js (vous l'avez supprimé de l'exemple) - et si vous le faites, c'est LoadSuccessExpression seront ignorés pour une raison quelconque

4voto

Brijesh Bajpai Points 51

Ajouter une référence à Microsoft.JScript dans votre application dans votre web.config comme ci-dessous :

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="none"/>
  </appSettings>
</configuration>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X