テストとして、私はWeb FormsからRazorに書いた概念実証アプリを、単純に評価できるように変換しています。
これまでのところ、頭を痛めている問題が1つあります。クライアント側のJavascriptを生成しています...
<script type="text/javascript">
var jqGridIdList = "<%: Url.Action ("getidlist", "office", new { area = "reports" }) %>";
var availableIds = [];
<% for (var i = 0; i < Model.Data.Count (); i++) { %>
availableIds.Push({ value : "<%: Model.Data.ElementAt (i).Text %>", label : "<%: Model.Data.ElementAt (i).Text %>" });
<% } %>
</script>
<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
availableIds.Push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
}
</script>
コンパイラは、「availableIds.Push」行に次のエラーを表示します。
コンパイラエラーメッセージ:CS1525:無効な式用語 '{'
それは明らかにC#としてコンパイルしようとしています...しかし、どうすれば停止できますか?
おかげで、
Kieron
擬似要素_<text>
_でラップする必要があります。これにより、パーサーがhtmlモードに戻り、javascriptがc#ではなくhtmlの一部として解析されます。発生する理由は@for()
がc#ブロックであり、その中で処理されるものはすべて、htmlタグによってエスケープされるまでc#と見なされます。おそらくhtmlタグが必要ないので、カミソリはモードを切り替える_<text>
_タグを提供します。
Asp.net Webフォームの違いに気づいた場合、<% for
_行を_%>
_で終了し、c#モードから抜けます。 Visual Studio 2010用のかみそり蛍光ペン拡張機能をダウンロードすると、コードがコードとして処理され、htmlがhtmlとして処理されるタイミングを確認できます。
_<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
<text>availableIds.Push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });</text>
}
</script>
_
さらに読みやすくするために_@:
_構文を使用できるようになりました
_<script type="text/javascript">
var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";
var availableIds = [];
@for(var i = 0; i < Model.Data.Count (); i++) {
@:availableIds.Push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
}
</script>
_