2013-04-23 105 views
2

我正在开发一个ASP.NET MVC 4 Web应用程序,它利用最新的JQuery和JQuery UI库,并自动引用它们(在_Layout.cshtml页面中)。不支持JQuery UI sortable()方法错误

我一直在遵循教程here来实现表格上的拖放重新排序功能。

但即使当我明确地在需要的视图模型上添加对最新JQuery UI文件的引用时,例如

<script src="/Scripts/jquery-ui-1.10.2.min.js" type="text/javascript"></script> 

sortable()方法不起作用。它不会在Visual Studio智能感知中显示,并且在运行时不起作用。在Internet Explorer(或任何浏览器)上运行时,我只会收到一条错误消息:“对象不支持属性或方法'可排序'”。

这里是我正在试图使用方法:

 <script type="text/javascript"> 
     $(document).ready(function() 
     { 
      $("#clueTable tbody").sortable(); 
     }); 
     </script> 

我从智能感知注意到有一个属性“sortables”和“排序”,它从jQuery UI文件找到,但不“排序”。

所以参考看起来很好,它绝对是最新的JQuery UI代码(我通过获取最新文件来验证这一点),所以我对这个有点神秘。

+1

我会使用Fiddler或IE开发工具网络面板来确认jquery ui脚本文件是否已加载。不要依赖VS智能感知。这是一个jsfiddle与你的确切代码,它工作正常。 http://jsfiddle.net/vR9UW/5/(使用jQuery UI 1.10.2)。必须有其他事情正在进行。 – BNL 2013-04-24 12:39:00

+0

感谢@BNL,我有点忘了开发者工具的存在! Chrome的开发人员工具似乎比Internet Explorer提供了更多的细节,所以我使用它来弄清究竟发生了什么。 – 2013-04-24 14:59:30

回答

1

在_Layout.cshtml中,看起来在某些时候,我手动引用了JQuery和JQuery UI脚本,忘记脚本已经以包的形式呈现,例如,

@Scripts.Render("~/bundles/jquery") 

我是正确引用正确的脚本,而是因为他们被再次加载,我认为他们破坏的文件,包括JQuery用户界面代码,这依赖于被加载JQuery的文件的第一个实例。

我不明白的是,默认情况下,即使文件存在于项目中并且在BundleConfig.cs文件中创建了脚本包,ASP.NET MVC 4应用程序也不会呈现JQuery UI框架。

因此,要解决我的问题,我删除了所有的手动引用,以便只有束进行渲染,并添加以下行来呈现在我的_Layout.cshtml文件的头部JQuery的UI代码:

@Scripts.Render("~/bundles/jqueryui"); 

捆绑包似乎工作的方式是Global.asax文件调用BundleConfig.cs的'RegisterBundles'方法,该方法通过搜索'Scripts'文件夹中的相关JavaScript文件以及任何位置否则你告诉它看起来。

然后,要从HTML加载脚本文件,必须使用@ Script.Render()来呈现它们,并提供脚本包的名称作为参数(例如“〜/ bundles/jqueryui”)。

要呈现网站每个页面上的所有脚本,可以将其添加到_Layout.cshtml文件中,该文件应用于每个页面。

相关问题