2012-10-05 75 views
10

我正在開發一個使用VSRC在ASP.net MVC4剃鬚刀中的JQuery移動應用程序,在cshtml頁面部分腳本的寫法如下。節段腳本不在ASP.net中呈現MVC4剃鬚刀

@section Scripts 
{ 
    <script type="text/javascript"> 
    $(document).ready(function() { 
     jQuery("#register-form").validationEngine(); 
    }); 
</script> 
} 

在layout.cshtml我有...

"@RenderSection("Scripts", false)". 

它適用於初始頁面(這使得第一頁),但是當它通過「ActionLink的」鏈接到其他頁面,則將該節寫在這些頁面中的腳本不起作用。

任何想法?

請幫忙,謝謝。

回答

1

我有同樣的問題。爲了解決這個問題,我只是避免了「腳本」部分。

從每一頁刪除@section Scripts{並將您的js代碼放在頁面的末尾。

對於您的示例,請務必將@Scripts.Render("~/bundles/jquery", "~/bundles/jquerymobile")移至_Layout.cshtml中的</head>之前的行。這將保證jQuery的加載時間到達$(document).ready(function() {...

================================== =============

關於爲什麼會發生的解釋和其他解決方案。 http://lextell.com/blog/2012/10/23/script-section-is-not-rendered-in-asp-net-mvc-4-jquery-mobile-when-navigate-to-another-page-2/

+0

這是一個問題,當你把所有的腳本在頁面的底部,使HTML載入第一,但它仍然是一個解決方案 –

+6

-1:雖然它的一個古老的回答,發現在使用谷歌時,它實際上是對問題的錯誤/錯誤答案。因爲將javascript放在頁面底部實際上是一種很好的做法......我想問題是該部分沒有從部分視圖或任何其他問題填充。但是,這種解決方法只是不好!另見http://stackoverflow.com/questions/7556400/injecting-content-into-specific-sections-from-a-partial-view-asp-net-mvc-3-with – MichaC

2

繼埃裏克Bacallao的線,我會sugest你以下幾點:使用URL.Content()來加載.min.jsØ.js文件

避免。 Scripts.Render()在每個場景中選擇正確的文件(Debug中的.js和Release中的.min.js)。

修改後的_Layout.cshtml應該是這樣的:

@Scripts.Render("~/bundles/jquery") 
    <script type="text/javascript"> 
     $(document).bind("mobileinit", function() { 
      $.mobile.ajaxEnabled = false; 
     }); 
    </script> 
    @Scripts.Render("~/bundles/jquerymobile") 
    @RenderSection("scripts", required: false) 

注:禁用jQuery Mobile的AJAX(這樣做)是一個補丁......不是一個完整的解決方案! UX降低很多。

0

這不是由ajax回發引起的嗎?

我認爲正在發生的事情是dom在Ajax化區域發生變化,並且由於document.ready只在頁面加載時運行一次,因此DOM不會重新綁定事件。

爲了得到這個工作,您需要在部分更新後重新啓動DOM綁定到事件。

歷史上這一直是ASP.Net updatepanels和docuemt.ready的問題,解決它的方法是將代碼放入pageLoad()中,而不是在每次回傳時調用它。

不知道這將適用於MVC。

結帳這個更多信息http://www.dotnet-tricks.com/Tutorial/aspnet/D719120612-Difference-between-document.ready-and-window.onload-or-pageLoad.html

+0

它實際上工作時,你使用ajax和從'@section scripts {}'中取出javascript –

0

我真的不知道爲什麼,並沒有時間還沒有弄明白,但我今天早上有同樣的問題。好像@section scripts在放置在cshtml視圖頁面的根目錄下時不起作用。下面的代碼修復此:

@{ 
    @section scripts { 
     @Scripts.Render("~/bundles/jqueryval") 
    } 
}