37

当我的视图模型中的某个条件为真时,我想执行一段 JavaScript:

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

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

4

7 回答 7

56

试试这个:

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

注意“ @:

于 2013-06-02T07:03:09.830 回答
20

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

@if (Model.Employees.Count > 1)
{
    <script type="text/javascript">
        $(function() {
            executeJsfunction();
        });
    </script>
}
于 2015-01-29T20:21:05.997 回答
18

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

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

这比在每一行添加@: 更简洁、更实用。块中的所有内容<text></text>都呈现为脚本。

于 2018-02-03T12:33:19.367 回答
17

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

<script type="text/javascript">
if (@Model.Employees.Count > 1)
{
    executeJsfunction();
}
</script>
于 2013-06-02T08:31:28.590 回答
4

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

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

我希望这有帮助。

于 2019-10-23T16:35:43.900 回答
0

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

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

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

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


<script>

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

</script>
于 2017-12-26T18:13:41.030 回答
0

如果您甚至不想根据某些条件渲染 java 脚本

在布局 html 中定义一个部分

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

在你看来

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

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

于 2019-01-16T13:54:44.743 回答