剃刀语法和Javascript
作为一个testing,我将我们从Web Forms写成的概念validation应用程序转换为Razor,简单地说我们可以评估它。
到目前为止,我遇到了一个问题,使我的头受伤..生成客户端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:无效的expression式项“{”
这显然是试图编译为C#…但我该如何阻止它?
谢谢,
基隆
您需要将其包装在伪元素<text>
。 这将把parsing器切换回html模式,然后将parsingjavascript作为html的一部分而不是c#。 它发生的原因是@for()
是ac#块,任何内部处理的内容也被认为是C#直到它被一个HTML标记转义。 由于您可能不希望html标签razor提供<text>
标签来切换模式。
如果你注意到你的asp.net webforms中的不同,你可以用<% for
line用%>
来取代c#模式。 如果您下载Visual Studio 2010的razor荧光笔扩展,它将帮助您看到代码被视为代码和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>