作为一个测试,我将我们从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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top