web-dev-qa-db-fra.com

ASP.NET MVC 4 Bundle de scripts de validation jQuery ne fonctionne pas

J'ai récemment mis à niveau un site Web pour utiliser ASP.NET MVC 4 et j'ai le code suivant pour rendre mon bundle de validation jQuery.

Mais j'obtiens l'erreur suivante:

Microsoft JScript runtime error: Object doesn't support property or method 'live'

Et cette erreur en cliquant dans une zone de texte:

Unhandled exception at line 1234, column 5 in http://localhost:13112/Scripts/jquery.validate.js

0x800a138f - Microsoft JScript runtime error: Unable to get value of the property 'call': object is null or undefined

Mon code groupé:

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

Mon code _Layout.cshtml:

    @Styles.Render("~/Content/css")
    @Styles.Render("~/Content/themes/base/css")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jqueryui")
    @Scripts.Render("~/bundles/modernizr")

Voici mon HTML rendu:

<link href="/Content/site.css" rel="stylesheet"/>

        <link href="/Content/themes/base/jquery.ui.core.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.resizable.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.selectable.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.accordion.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.autocomplete.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.button.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.dialog.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.slider.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.tabs.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.datepicker.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.progressbar.css" rel="stylesheet"/>
<link href="/Content/themes/base/jquery.ui.theme.css" rel="stylesheet"/>

        <script src="/Scripts/jquery-1.9.0.js"></script>

        <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

        <script src="/Scripts/jquery-ui-1.9.2.js"></script>

        <script src="/Scripts/modernizr-2.6.2.js"></script>

Quelqu'un peut-il indiquer pourquoi cette erreur peut se produire?

Merci, Alex.

29
Alex Hope O'Connor

La méthode .live a été déconseillée dans jQuery v1.7 + et supprimée dans jQuery v1.9 +.

Rapport de bogue: http://bugs.jquery.com/ticket/1321
Explication: http://jquery.com/upgrade-guide/1.9/#live-removed

.live () supprimé

La méthode .live () est obsolète depuis jQuery 1.7 et a été supprimée dans 1.9. Nous vous recommandons de mettre à niveau le code pour utiliser la méthode .on () à la place. Pour correspondre exactement à $ ("a.foo"). Live ("click", fn), par exemple, vous pouvez écrire $ (document) .on ("click", "a.foo", fn). Pour plus d'informations, consultez la documentation .on (). En attendant, le plugin jQuery Migrate peut être utilisé pour restaurer la fonctionnalité .live ().

Comment résoudre ce problème: Téléchargez le plugin jquery migrate et ajoutez-le à votre regroupement:

  bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
              "~/Scripts/jquery-{version}.js",
              "~/Scripts/jquery-migrate-{version}.js"));

Mise à jour: le plugin de migration est désormais disponible auprès de Nuget également:

PM> Install-Package jQuery.Migrate

49
Magnus Johansson