【问题标题】:Using Razor Syntax within JavaScript Conditional Statment在 JavaScript 条件语句中使用 Razor 语法
【发布时间】:2015-08-16 11:59:21
【问题描述】:

在 index.cshtml 中,我有以下类似的工作代码:

<script type="text/javascript">

if ('@Model.SomeCondition' === 'True'){
Do Something();
}

</script>

=== 'True' 对我来说似乎是一个奇怪的 hack,它迫使 Razor 和 JavaScript 相处。如何重构以使用=== true?这不会给出相同的结果。这可以用 Razor 和 JavaScript 完成吗?

【问题讨论】:

  • 混合使用 Razor 和 Javascript 是个坏主意。您应该使用data-* 属性将数据与代码分开。

标签: javascript c# asp.net-mvc razor conditional


【解决方案1】:

如果属性是bool,可以通过以下方式签入razor if condition:

<script type="text/javascript">
@if (Model.SomeCondition){
@:Do Something();
}
</script>

或:

<script type="text/javascript">
@if (Model.SomeCondition){
<text>
Do Something();
</text>
}    
</script>

【讨论】:

  • 当然,这将评估服务器代码中的布尔值,如果为真,则仅输出 javascript。在某些方面比将服务器布尔值转换为客户端布尔值更好的解决方案。
【解决方案2】:

只需在 c#/razor 中使用您要在其中执行的 javascript 编写 if 语句。

例子:

@if(boolVariable)
{
    <script>
        //javascript here
    </script>
}

【讨论】:

  • 如果这是您想要运行的唯一 JavaScript,那很好,但如果它是更大块的一部分,则它实际上不起作用
  • 好吧,假设这是在已经声明的
【解决方案3】:

假设SomeCondition是一个字符串,去掉引号,使其符合javascript布尔值的小写形式

<script language="javascript">
    // just to be clear this is javascript, not server code
    if (@Model.SomeCondition.ToLowerInvariant()){
        .. // 
    }
</script>

但是,如果SomeCondition 在服务器代码中是布尔值,则需要先转换为字符串并将其设为小写

<script language="javascript">
    // just to be clear this is javascript, not server code
    if (@Model.SomeCondition.ToString().ToLowerInvariant()){
        .. // 
    }
</script>

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2015-07-12
    • 2012-11-30
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多