Razor语法和Javascript

Kie*_*ron 54 javascript razor asp.net-mvc-3

作为测试我正在转换我们从Web Forms写到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>
Run Code Online (Sandbox Code Playgroud)

剃刀语法

<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>
Run Code Online (Sandbox Code Playgroud)

编译器在'availableIds.push'行上给出了以下错误:

编译器错误消息:CS1525:无效的表达式术语'{'

显然它试图将其编译为C#...但我该如何阻止它呢?

谢谢,
Kieron

Bui*_*ted 97

您需要将其包装在伪元素中<text>.这会将解析器切换回html模式,然后它将解析javascript作为html的一部分,而不是c#.它发生的原因@for()是ac#block,其中的任何内容也被认为是c#,直到它被html标签转义.因为你可能不想要一个html标签,所以razor提供了<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>
Run Code Online (Sandbox Code Playgroud)

更新最新版本

您现在可以使用该@:语法以获得更高的可读性

<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>
Run Code Online (Sandbox Code Playgroud)