2013-04-23 62 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文件中,該文件應用於每個頁面。