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

时间:2012-11-23 20:48:57

标签: razor asp.net-mvc-4

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

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

此代码无法编译,我该怎么做?

7 个答案:

答案 0 :(得分:37)

试试这个:

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

请注意“ @:

答案 1 :(得分:14)

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

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

答案 2 :(得分:11)

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

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

答案 3 :(得分:5)

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

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

这可以使它比每行添加@:更清晰,更实用。 <text></text>块中的所有内容都呈现为脚本。

答案 4 :(得分:0)

我知道这个问题刚刚发布,但我添加了一个新的解决方案作为替代解决方案:

您可以将模型中的值注入所选DOM元素的数据属性,并通过检查构建视图时注入的相同数据属性的值来验证您的条件。

例如,检查以下视图和脚本代码段如何操作:

<div id="myDiv" data-count="@Model.Employees.Count">
</div>


<script>

  if($("#myDiv").data("count") > 1){
    executeJsfunction();
  }

</script>

答案 5 :(得分:0)

如果您甚至不想基于某些条件呈现Java脚本

在布局html中定义一个部分

<html> 
<body>  
   @RenderSection("xyz", required: false) 
</body> 
</html>

您认为

@if (Model.Condition)
{
   @section xyz{
      <script>
        $(function () {
             // Your Javascript
         });
    </script>
   }
}

就我而言,如果该功能未启用,我不想公开我的Javascript,这也会减小页面的大小

答案 6 :(得分:0)

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

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

我希望这会有所帮助。