【问题标题】:Conditionally execute JavaScript in Razor view在 Razor 视图中有条件地执行 JavaScript
【发布时间】:2012-11-12 04:48:18
【问题描述】:

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

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

这段代码无法编译,我该怎么办?

【问题讨论】:

标签: razor asp.net-mvc-4


【解决方案1】:

试试这个:

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

注意“@:

【讨论】:

  • 不行,还是无条件执行函数
  • 它真的帮助了我
【解决方案2】:

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

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

【讨论】:

  • 只想在此处添加我的 0.02 美元 -- 这很好用,对我来说,关键是 &lt;script&gt; 标记需要在 in 条件块中开始。如果我将&lt;script&gt; 标记放在其中,并且在条件中只包含一个JS 块,那么Razor 引擎会尝试将其解析为C# 并抛出。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 这个问题是你暴露了条件,这在某些情况下可能没问题,但是如果你只需要管理员的脚本输出,而不是特权较低的用户,例如,你不需要想要公开功能。
    【解决方案5】:

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

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

    我希望这会有所帮助。

    【讨论】:

      【解决方案6】:

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

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

      比如查看下面的视图和脚本代码sn -p怎么做:

      <div id="myDiv" data-count="@Model.Employees.Count">
      </div>
      
      
      <script>
      
        if($("#myDiv").data("count") > 1){
          executeJsfunction();
        }
      
      </script>
      

      【讨论】:

        【解决方案7】:

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

        在布局 html 中定义一个部分

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

        在你看来

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

        在我的情况下,如果未启用该功能,我不想公开我的 Javascript,它也会减小页面的大小

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-31
          • 1970-01-01
          • 1970-01-01
          • 2020-02-11
          • 1970-01-01
          • 2012-03-29
          • 2019-10-24
          • 2017-12-02
          相关资源
          最近更新 更多