无法加载资源:未捕获的TypeError:$(…)。select2不是函数

所以我的MVC应用程序在呈现我的视图时继续抛出状态代码为500的Http内部服务器错误。

抛出的错误是JQuery“Uncaught TypeError:$(…)。select2不是函数”

Uncaught TypeError: $(...).select2 is not a function at HTMLDocument. (AddUser:381) at fire (jquery-1.11.0.js:3100) at Object.fireWith [as resolveWith] (jquery-1.11.0.js:3212) at Function.ready (jquery-1.11.0.js:3424) at HTMLDocument.completed (jquery-1.11.0.js:3454) 

使用调试工具,它会抛出错误:

 $('selectUser').select2(); 

这就是我调用脚本的方式:

 @section Scripts {  @Scripts.Render("~/bundles/forms")    $(document).ready(function () { $('selectUser').select2(); });  

一些SOpost表明,当您在脚本标记中省略type="text/javascript"或者在引用CDN服务之前调用select2函数时会导致此错误,但是因为它清楚地显示在我的代码上所有关于前述。

根据这个Uncaught TypeError:$(…)。select2不是一个函数 ,我被告知确保我有一个版本的JQuery加载,一切似乎都没问题

以下是我的View中的一些额外代码,有助于重现问题:

  function submitForm() { var usersRoles = new Array; jQuery("#dualSelectRoles2 option").each(function () { usersRoles.push(jQuery(this).val()); }); var model = new Object(); model.userId = jQuery('#selectUser').val(); model.rolesList = usersRoles; console.log('model: ' + 'user: ' + model.userId + 'roles: ' + model.rolesList); console.log('JSON: ' + JSON.stringify(model)); jQuery('#loading3').show(); jQuery.ajax({ type: "POST", url: "@Url.Action("AddUser")", dataType: "json", contentType: "application/json", data: JSON.stringify(model), success: function (data) { showSuccessMessage(data); }, failure: function (errMsg) { jQuery('#loading3').hide(); alert(errMsg); } }); return false; } //Shows the success message function showSuccessMessage(data) { jQuery('#loading3').hide(); alert(data); }  

控制器:

  public ActionResult AddUser() { if (TempData["StatusMessage"] != null) { ViewBag.StatusMessage = TempData["StatusMessage"].ToString(); } else { ViewBag.StatusMessage = ""; } AddUserToRolesViewModel vm = new AddUserToRolesViewModel(); vm.Users = db.Users.ToList(); return View(vm); } 

编辑:只是为了确保JQuery Core没有加载两次(一次在Master中,一次在Content页面中) – 我已经为我的母版页添加了标记。

_Layout.cshtml

        @Styles.Render("~/Content/Template/css/style.css")    @Scripts.Render("~/bundles/jquery")         @ViewBag.Title   @Html.Partial("_Header_top")  
@Html.Partial("_Menu_left")
@RenderBody()
@RenderSection("scripts", required: false) @Scripts.Render("~/bundles/jqueryval")

更新II:所以我继续我的App_Start文件夹并导航到我的BundleConfig.cs ,在那里我发现了一些东西:

  public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js", "~/Content/Template/js/plugins/jquery-ui- 1.8.16.custom.min.js" } 

根据这个链接: 使用ASP.NET MVC4 jquery / javascript包 ,我意识到文件"~/Content/Template/js/plugins/jquery-ui-1.8.16.custom.min.js"已添加了alreasdy到这个包并在我的内容页面(AddUser.cshtml)中引用为:

   

在这一点上,我坚信这将解决问题,所以我在我的内容页面中删除了这个引用,因为我相信这可能会加载JQuery核心两次,但仍然没有。 错误仍然存​​在。 我还能做些什么来尝试解决这个问题?

值得一提的是,所有浏览器(Chrome,IE和Firefox)都存在此错误