2009-06-25 12 views
13

私は、インラインC#はMVCフレームワークを使用して、私のJavaScriptファイルで動作するように取得しようとしています。私はこの小さなテストコードを作りました。MVCフレームワークではJavaScriptファイル内のインラインC#を使用して

$(document).ready(function() { 
    alert(<%= ViewData["Message"] %>); 
}); 

このコードをビューの内側で使用すると、完全に機能します。私は私のaspxビューの外に取得し、JavaScriptファイルでこれをしようとすると、私は違法なXML文字を取得します。私は、これはMVCフレームワークの設計によるものです理解が、私はウェブ上でこの上の任意の材料を見つけることができませんでした。

誰かがMVCフレームワークを使用してJavaScriptファイルで作業するインラインC#を取得しましたか?インラインC#が意味をなすために、サーバーによって処理されなければならないことを

答えて

14

として、C#は、サーバーによって処理されていません。

可能な解決策は、同じモデルを使用して別のビューを作成してJavaScriptを出力し、そのビューを<script type="text/javascript" src="yourJSview.aspx"></script>で参照することです。

SLaks' answerあたりとして追加:text/javascriptにコンテンツタイプを設定し

、直接(<script>タグなし)<%@ Pageディレクティブの下に、あなたのJavaScriptソースを置きます。

VSでIntelliSenseを取得しないように注意してください。

+2

素晴らしい解決策 –

+1

私は、インテリセンスの欠如の問題を解決することが可能かもしれないと思う、http://stackoverflow.com/questions/1045451/using-inline-c-inside-javascript-file-in-mvc-framework/3268088#3268088 – 7wp

3

。当然、それはちょうど平らなJavaScriptファイルでは動作しません。

+0

私はできるだけ多くを考え出したが、そこに何かがあるかもしれない期待していました。私はjavascriptファイルで動作する素晴らしい絶対的なリンクを与える私のHTMLヘルパークラスを取得しようとしています。ああよく –

1

あなたは別のファイルにC#のコードを持っており、コードを処理していないサーバは、スクリプトファイルはプレーンな文字列として扱われるブラウザとインラインスクリプトによって呼び出されます、あなたのビューでそれを含む場合

代わりに、あなたがスクリプトファイルを含むときにrunat = serverスクリプトを試すこともできますが、この影響についてはわかりません。

4

.aspxファイルはMVCフレームワークのビューファイルです。フレームワークは、ビューと部分ビューのみをレンダリングします。私は、javascriptファイルの中にサーバ側のコードを使用する方法は存在しないと思います。

あなたは隠しフィールド

<%-- This goes into a view in an .aspx --%> 
<%= Html.Hidden("MyMessage", ViewData["Message"]) %> 

にあなたのメッセージを含めると、あなたのjavascriptファイル内のことを使用することができます。他の人が言っている

// This is the js file 
$(document).ready(function() { 
    alert($("#MyMessage").attr("value")); 
}); 
+0

私はこれが本当に私が見ている最高のソリューションだと思う。もう一つの選択肢は、私が探しているメッセージやリンク情報を吐き出すことができるURLを持つことです。それから私は意思でそれを使うことができました。 –

+2

@Serhat:またはのビューと$(document).ready(function(){alert(msg);}); JSファイルに保存します。 "Message"に引用符や改行文字が含まれている可能性がある場合は、それらをエスケープするように注意しなければなりません。そうしないと、ソリューションの隠された入力やJavaScript変数の割り当てが破られる危険があります。 –

2

Webサーバーは.jsファイルを処理せず、クライアントにのみ配信します。これは.aspxや他のASP.NETファイルタイプとは対照的です。これらのファイルは、クライアントに提供される前にサーバーによって解釈されます。

4

あなたはJavaScriptをレンダリングするASPXビューを作ることができます。

text/javascriptにコンテンツタイプを設定し、(<script>タグなし)<%@ Pageディレクティブ以下の直接あなたのJavaScriptソースを置きます。

VSでIntelliSenseを取得しないように注意してください。

+1

これは素晴らしいアイデアですが、実際にはJavaScriptを含むaspxビューの結果がキャッシュされない限り、誰もこれをやりたいと思います。もしそうでなければ、これは、スクリプトコードが使用されているメインページに直接埋め込むことと同じです。私が間違っている? – 7wp

+1

@Roberto:複数のページで使用するとどうなりますか? – SLaks

+1

そうなら、はい。再利用のためには、これを解決するための素晴らしい方法です。しかし、私は伝統的に外部のJavaScriptファイルを含むキャッシュ機能を複製するという流れに沿ってもっと考えていました。 – 7wp

0

私はSerhatに同意します。HTMLの隠しフィールドをレンダリングするのが最善です。また、前述のように、HTMLのURLに移動することもできます。これは、WebサービスまたはIHttpHandlerの実装を介して行うことができます。次に、 "messages.axd?id = 17"などのURLを使用できます。

4

Wagner's answerSLaks's answerを付与するために追加するには、実際にそのような彼の溶液中であなたのIntelliSenseを与えることにVisual Studioのをだますことができます。彼の解決策では

<%if (false) {%><script type="text/javascript"><%} %> 
// your javascript here 
<%if (false) {%></script><%} %> 

をそこのページにレンダリングするときに必要とされます<script>タグではありませんが、Visual StudioのJavaScript IntelliSenseを無効にする副作用があります。上記の場合、Visual StudioはIntelliSenseを提供し、同時に実行時に<script>タグを表示しません。

2

これは古い質問ですが、今後googleで遭遇する人にとっては、data- *属性を使用して変数を渡すことをお勧めします。隠し要素を使用することもできますが、<script>タグ自体を使用して、固有のIDを付けることもできます。

完全な例が、ここで答えている:https://stackoverflow.com/a/18993844/1445356

関連する問題