Asp.Net MVC3 RC Razor视图:在<javascript>块内嵌入代码的语法

18

在使用MVC3 RC1razor视图时,我在javascript块中嵌入c#代码遇到了问题。我应该使用什么语法才能使它起作用?我收到警告,例如isOk变量上的Expected constant等警告。(如果没有text标签,以下代码将不被识别为javascript)

@{bool isOk = true;}

<script type="text/javascript">
    var tmp1 = "";
    @if (isOk)
    { 
        <text>
            var tmp=""; // this should be interpreted as javascript
        </text>       
    }
</script>
2个回答

28
您需要使用<text>标签来表明内容不是在服务器上进行评估的。例如:
@{
    var isOK = true;
}

<script type="text/javascript">
    var tmp1 = "";
    @if (isOK)
    { 
        <text>
            var tmp = "foo";
        </text>       
    }
</script>

会在生成的页面中输出:

<script type="text/javascript">
    var tmp1 = "";
    var tmp = "foo";
</script>

就“预期常量”警告而言,Razor Intellisense仍处于测试阶段,因此远非完美。这只是一个可以安全忽略的警告。重要的是应用程序能够正常工作并发出有效的HTML。希望在最终产品中能够修复这个问题。从个人经验来看,我只信任由C#编译器发出的警告。当我在视图中工作时,我会安全地忽略Visual Studio发出的所有垃圾警告,因为我知道它是错误的。


1
你说得对,在这种情况下,解析器的警告应该被忽略。输出结果是正确的...谢谢。 - rekna
1
不幸的是,在MVC 3(最终版本)中仍然存在警告。 - Jonas Sourlier

9
一个更简洁且易于阅读的替代方法是将文本转义,如下所示:
<script type="text/javascript"> 
    var tmp1 = ""; 
    @if (isOK) 
    {  
        @:var tmp = "foo";
    } 
</script> 

在这种情况下,True通常会更整洁地显示为多行块<text></text>。 - James Hughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接