2016-02-23 35 views
0

這不是標準,所以請在標記重複之前閱讀。從我的MVC應用程序獲取會話值到我的Javascript中

在我們在我們的_Layout.cshtml頂部MVC應用程序,我們載入我們的腳本是這樣的:

@Scripts.RenderFormat("<script src='{0}' defer></script>", "~/bundles/scripts") 

截至_Layout.cshtml底部,我們有這樣的:

@RenderSection("scripts", required: false) 

對於外部原因,我控制我們必須有這個推遲。 :(

這束包括jQuery的文件,其中的其他文件被稱爲Script.js,它獲取的jQuery後加載,並且有一個名爲setCollapse(collapse)功能

它看起來像這樣:。

function setCollapse(collapse) { 
    debugger; 
    alert(collapse); 
    if (collapse == 'False') { 
     $('.collapse').collapse("show"); 
    } else { 
     $('.collapse').collapse(); 
    } 
} 

我想用一個會話值,像這樣在我的MVC視圖載荷javascript函數:

@section scripts 
{ 
    <script> 
     $(document).ready(function() { 
      debugger; 
      var collapse = '@Session["Collapse"].ToString()'; 
      setCollapse(collapse); 
     }); 
    </script> 
} 

但我繼續得到:

Uncaught ReferenceError: $ is not defined

我怎樣才能讓我的會話價值得到傳入我的javascript/jQuery的頁面加載時?

+0

你有沒有正確加載你的jQuery腳本? – Ric

+0

是的,我所有的其他jQuery代碼都可以。事情是,延遲,視圖中的任何JavaScript都會在加載jQuery之前運行。我的script.js文件在jQuery之後被加載,但我不確定如何將Session值存入script.js。 –

+1

儘量不要拖延。只要在使用它之前在頁面中包含jQuery,您的代碼就應該可以工作。 – Shyju

回答

0

您需要的結束標記前添加

@RenderSection("scripts", required: false) 

在你的佈局文件。只要你的jquery在加載之前就應該可以工作。

編輯

body標籤

<script type="text/javascript"> 
    $.noConflict(); 
    $ = $.attachReady(jQuery); 
</script> 

年底前加入這頭

<script type="text/javascript"> 
    window.$ = (function() { 
     var q = [], f = function (cb) { 
      q.push(cb); 
     }; 
     f.attachReady = function ($) { 
      $(function() { 
       $.each(q, function (i, f) { 
        f(); 
       }); 
       q.length = 0; // clear it, just in case 
      }); 
      return $; 
     } 
     return f; 
    })(); 
</script> 

,然後將下面這將推遲所有的jQuery相關的代碼和在jquery加載後運行它們。

編輯2

<script type="text/javascript"> 
    $.noConflict(); 
    $ = $.attachReady(jQuery); 
</script> 

這應該是body標籤結束前的最後一件事。

+0

我有。由於'defer','@RenderSection(「scripts」,required:false)'在jQuery加載之前運行。即使我將延遲放入RenderSection的腳本中,它們在加載jQuery之前運行。 –

+0

我應該在'@RenderSection(「scripts」,false)之前或之後放置'$ .noConflict();'部分嗎? –

+0

我得到這個:Uncaught ReferenceError:setCollapse沒有定義(匿名函數); Uncaught TypeError:$ .noConflict不是函數 –

1

下面是我的工作方式。當然這比我想象的更簡單。

在我們在我們的_Layout.cshtml頂部MVC應用程序,我這樣做:

<script> 
    var collapse = '@Session["Collapse"].ToString()'; 
</script> 
@Scripts.RenderFormat("<script src='{0}' defer></script>", "~/bundles/scripts") 

RenderFormat加載jQuery和我script.js文件。

然後在我的腳本中。js我這樣做:

$(document).ready(function() { 
    //.... 

    // Global collapse value 
    if (collapse == 'False') { 
     $('.collapse').collapse("show"); 
    } else { 
     $('.collapse').collapse("hide"); 
    } 
}); 
相關問題