有条件地在Razor视图中执行JavaScript

ngr*_*son 27 razor asp.net-mvc-4

我希望在视图模型中某个条件成立时执行一段JavaScript:

<script type="text/javascript">
    @if (Model.Employees.Count > 1)
    {
        executeJsfunction();
    }
</script>
Run Code Online (Sandbox Code Playgroud)

这段代码不能编译,我该怎么做?

小智 40

试试这个:

<script type="text/javascript">
    @if (Model.Employees.Count > 1)
    {
        @:executeJsfunction();
    }
</script>
Run Code Online (Sandbox Code Playgroud)

注意" @: "


Ali*_*hşi 14

使用js if-else块,而不是C#.Js有自己的if-else区块.

<script type="text/javascript">
if (@Model.Employees.Count > 1)
{
    executeJsfunction();
}
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这个问题是您可以公开条件,在某些情况下可能很好,但是例如,如果您只需要脚本输出给管理员,而不是特权程度较低的用户,则您不想公开此功能。 (2认同)

Cla*_*art 11

如果你有更复杂的JS,你可以执行以下操作(脚本标签或任何标签,在@if内不需要额外的转义):

@if (Model.Employees.Count > 1)
{
    <script type="text/javascript">
        $(function() {
            executeJsfunction();
        });
    </script>
}
Run Code Online (Sandbox Code Playgroud)

  • 只想在这里添加我的$ 0.02 - 这很有用,对我来说关键点是`<script>`标签需要在条件块中启动*.如果我把`<script>`标签放在它之外,并且只是在条件内有一块JS,那么Razor引擎试图将它解析为C#并抛出. (3认同)

Ric*_*ckL 7

对于剃刀条件块中的多行脚本,可以使用:

<script type="text/javascript">
    @if (Model.Employees.Count > 1)
    {
       <text>
            executeJsfunctionOne();
            executeJsfunctionTwo();
            executeJsfunctionThree({
               "var_one": true,
               "var_two": false
            });
       </text>
    }
</script>
Run Code Online (Sandbox Code Playgroud)

与在每行中添加@:相比,这可以使它更清洁,更实用。在内的一切<text></text>块呈现为脚本。


Oth*_*ali 5

MVC 变量在服务器端处理,代码始终尝试渲染 Javascript 值以生成 HTML,请尝试以下代码:

<script type="text/javascript">
@{if (Model.Employees.Count > 1)
    {
        @:executeJsfunction();
    }
}
</script>
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。