Razor视图引擎中的Javascript

Mel*_*ssa 3 javascript razor asp.net-mvc-3

我有以下javascript:

<script type="text/javascript">
    function doReveal() {
        if (@Model.C1 == true) {
            document.getElementById('A1').style.backgroundColor = 'yellow';
        }
        if (@Model.C1 == false) {
            document.getElementById('A1').style.backgroundColor = 'yellow';
        }
</script>
Run Code Online (Sandbox Code Playgroud)

我想这样做,以便函数doReveal检查Model.C1(这是一个布尔值)然后更改背景颜色,如果它是真的.

然而,我收到一条消息,说"条件编译已关闭",并且Model.C1下的绿色波浪线以及背景颜色也不会改变,即使我同时具有true和false.

我测试了背景更改线,并且在"if"之外工作.

查看页面源我看到:

if (True == true) document.getElementById('A1').style.backgroundColor = 'yellow';
Run Code Online (Sandbox Code Playgroud)

我更改了它并删除了== true但它仍然无法正常工作.即使以下也行不通.然而它的作用是删除"if(True)"并设置颜色.

if (True) document.getElementById('A1').style.backgroundColor = 'yellow';
Run Code Online (Sandbox Code Playgroud)

有谁知道什么可能是错的?

arc*_*hil 11

剃刀代码起始符号必须位于if语句之前.否则,引擎认为如果是javascript代码的一部分,而不是剃刀.另外我认为你需要剃刀文字标记

      <script type="text/javascript">
            function doReveal() {
                @if (Model.C1 == true) {
<text>
                    document.getElementById('A1').style.backgroundColor = 'yellow';
</text>
                }
                @if (Model.C1 == false) {
                    document.getElementById('A1').style.backgroundColor = 'yellow';
                }
        </script>
Run Code Online (Sandbox Code Playgroud)

另一种情况是你想在javascript而不是服务器端运行if语句.在这种情况下,您的剃刀标记是corect,但生成的代码就像

    <script type="text/javascript">

    function doReveal() {

        if (False == true) {

            document.getElementById('A1').style.backgroundColor = 'yellow';

        }

        if (False == false) {

            document.getElementById('A1').style.backgroundColor = 'yellow';

        }

</script>
Run Code Online (Sandbox Code Playgroud)

False不等于true,也不等于false.(javascript区分大小写).True的情况相同.所以,你的if语句不会执行.