2016-04-05 17 views
2

this questionの結果として、var jsObject = @Html.Raw(Json.Encode(Model))のような技術を使用して、MVC ViewModelオブジェクトをJavascriptにキャストすることは可能です。MVC ViewModelを外部の.jsファイルのJavascriptオブジェクトにキャストする

このテクニックは実際の.cshtmlページで直接使用することができます。このデータを外部の.jsファイルに入れたいのですが?

.cshtmlページでvar jsObjectをインスタンス化しても、外部のJavascriptファイルからこのオブジェクトにアクセスできますか、範囲外であると考えられますか?

+0

[RazorJS](http://www.nuget.org/packages/RazorJS) –

+0

アクションを作成し、jQuery ajaxを使用して呼び出します。 – Brij

+0

@Brij私はサーバーにもう一度往復することなくこれを行う方法を探しています。また、RazorJSはメンテナンスされていないようです(ウェブサイトがダウンしています)。私はJavascriptファイルでC#スタイルの構文を使用するつもりはありません。 – alex

答えて

3

あなたのjavascriptファイル内から生成されたjsObjectにアクセスできます。それがスコープ外にならないようにするために、あなたは世界のように扱う必要があります:あなた `.cshtml 'は、

:あなたのjsFile.js

if(jsObject) 
{ 
// do whatever you need 
} 

お知らせその内部

var jsObject = @Html.Raw(Json.Encode(Model)) 
<script src="/path/to/jsFile.js"> 

あなたはjsFile.jsのメソッドに変数を渡さないので、jsFile.jsにアクセスする唯一の方法は、あなたが.cshtmlに与えた名前を知ることです。これによりコードが非常に脆くなります。 もう1つ、より良い方法は、JavaScript関数に変数を渡すことです。あなたの.cshtml

<script src="/path/to/jsFile.js"> 

var jsObject = @Html.Raw(Json.Encode(Model)) 
myProcessor(jsObject) 

このアプローチを使用して、myProcessor方法は、あなたの変数の名前が何であるかを気にしません。

+0

クールな技術と素晴らしい説明 - ありがとう! – alex

関連する問題