9

我正在使用visual studio 11項目的ASP.net 4,MVC4(RC)。 我想呈現呈現局部視圖的MVC4 Razor視圖。我的部分視圖需要一些JavaScript。 在我的部分觀點,當我包括我的JavaScript內腳本部分如下,它似乎並沒有加載。MVC4部分視圖javascript捆綁問題

@section Scripts { 
    <script type="text/javascript"> 
     $(function() { 
      alert("test"); 
     }); 
    </script> 
} 

如果我刪除腳本部分失敗的jQuery的庫(它們捆綁在一起,並呈現我_Layout.cshtml頁)文檔準備代碼運行時尚未加載。

<script type="text/javascript"> 
    $(function() { 
     alert("test"); 
    }); 
</script> 

_layout頁面代碼加載的jQuery庫

@Scripts.Render("~/bundles/jquery") 
@RenderSection("scripts", required: false) 

有誰知道一個解決方案的,還是我完全沉溺於了錯誤的方式?它破壞我的頭!

回答

10

不要在部分一document.ready換你的腳本:

@section Scripts { 
    <script type="text/javascript"> 
     alert("test"); 
    </script> 
} 

啊,不要把腳本的諧音。 Javascript代碼應放置在單獨的JavaScript文件中。如果你想在部分被加載時執行一些javascript,你只需將這個腳本外部化爲一個可重用的函數/插件,一旦你的partial被加載,就可以調用它。

+0

感謝您的迴應,但它不適合我。即使在刪除document.ready時,當我查看頁面源時,javascript也完全沒有了。如果我將javascript移動到其父視圖(不是局部視圖),它會加載。但我確實需要這樣做的負面看法。 – martin

+0

終於得到了這個工作。當我使用腳本創建頁面時 – martin

+3

發現@martin的問題非常有趣,並且他標記了自己的答案,即使您的解決方案是正確的解決方案。 :D – Samuel

4

終於得到了這個工作。我從我的部分視圖中刪除了我的javascript,並將它放在父視圖中(不是部分),在腳本部分中。此腳本部分在使用腳手架創建視圖時自動創建(創建),並放置在頁。爲了得到這個工作,我不得不將它移動到頁面的頂部 - 在調用渲染我的部分之前。

2

ClientDependency正好解決了這個問題,並且允許您將腳本引用添加到部分視圖,這些視圖會彙總並放置在頁面的末尾(或您指定的任何位置)。它還處理捆綁,版本控制和縮小頁面。

確保腳本引用的開銷在「父」視圖而不是部分並不會影響到我,但如果您有部分負載都需要它們自己的腳本和CSS,則客戶端依賴關係可能會有所幫助。

+0

這是一個更小更簡單的擴展方法,可以解決部分中腳本的特定問題: http://blog.logrythmik.com/post/A-Script-Block-Templated-Delegate-for-Inline-Scripts-in-Razor-Partials – peter3