剃刀语法和Javascript
-
27-09-2019 - |
题
作为一个测试,我将我们从Web窗体剃刀书面证明的概念应用程序,只需所以我们可以对其进行评估。
我碰到的一个问题,到目前为止这是使我的头hurt..generating客户端Javascript ...
web的表单
<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#...但我怎么阻止它?
谢谢,结果 基隆
解决方案
您需要将其包装在伪元件<text>
。这将切换解析器回HTML模式,然后将解析JavaScript作为HTML的一部分,而不是C#。它发生的原因是@for()
是一个C#块内的东西也被认为是C#,直到它是由HTML标签转义处理。既然你可能不希望一个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>
不隶属于 StackOverflow