2016-09-22 23 views
1

MVCアプリケーションでは、外部の.jsファイルにViewBag、ViewData、TempDataの値を取得します。 私はview.cshtmlでスクリプトを書く必要がないので、外部のjsファイルを追加しました。しかし、私はこのjsファイルでこのViewBag、ViewData、TempDataの値を呼び出すことができません。外部のjsファイルのViewBag、ViewData、TempDataを呼び出します。

誰がどのようにview.cshtml

+0

あなたが値を読んでいるあなたのjsの変数に代入するために、JSコードの少なくとも1つの行を記述する必要があり外部のjsは – Shyju

答えて

2

内の任意のJSコードを記述することなく、これらの値を呼び出すことを教えてもらえますレイザーコードは、サーバー側で実行されるため、これらの値はJavascriptを利用できないクライアント側で実行されます。私がこれを回避する方法を知っている唯一の方法は、あなたの.jsファイルにある変数を宣言し、.cshtmlファイルで初期化することです。あなたにとって理想的ではないかもしれませんが、それが助けてくれることを願っています

my.cshtml:

... 
<script type="text/javascript"> 
    myVar = @(ViewBag.myVar); // etc. 
</script> 
... 

my.js

var myVar = null; 

function myFunc() { 
    // Check for initialization 
    if (myVar == null) 
     alert("myVar not initialized!"); 
    ... 
    // use myVar 
    ... 
} 
+2

を使用できます。特に、このようなグローバルスコープで宣言するときは、JavaScript変数を常に*ネームスペースにする必要があることを指摘しておきます。 –

0

あなたがCSHTMLで任意のスクリプトを避けたいならば、ちょうどあなたが警告を渡したい値に隠しフィールドを設定します。 コントローラ:

TempData["Message"] = "My message text"; 

ビュー:

@if(TempData["Message"]) { 
    <input type="text" id="tempdata" class="hidden" 
    value="@TempData["Message"]"/> 
} 

JS:

var tempMessage = document.getElementById('tempdata') ? 
     document.getElementById('tempdata').value : null; 
if(tempMessage) { alert(tempMessage); }; 
関連する問題