在JavaScript条件语句中使用Razor语法

5

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

<script type="text/javascript">

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

</script>

=== 'True' 看起来像是一个奇怪的 hack,目的是为了让 Razor 和 JavaScript 兼容。我该如何重构代码使用 === true?这样做并不能得到相同的结果。在 Razor 和 JavaScript 中能否完成这个任务?


6
混合使用 Razor 和 JavaScript 不是一个好主意。你应该使用 data-* 属性将数据和代码分开。 - SLaks
3个回答

9
如果属性是bool,您可以在Razor中按照以下方式检查条件:
<script type="text/javascript">
@if (Model.SomeCondition){
@:Do Something();
}
</script>

或者:

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

2
当然,这将在服务器代码中评估布尔值,并仅在为真时输出JavaScript。在某些方面,这比将服务器布尔值转换为客户端布尔值更好的解决方案。 - Jamiec

2
假设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>

0
只需在C# / Razor中编写if语句,并在其中放置要执行的JavaScript代码。
示例:
@if(boolVariable)
{
    <script>
        //javascript here
    </script>
}

如果那是你想要运行的_唯一_ JavaScript,那就没问题,但如果它是一个更大块的一部分,它就不起作用了。 - James Thorpe
好的,假设这将放在已经声明的<script>标签中,只需使用ViewContext.Writer.Write("javascript here")。这本来就不是一个好的情况,这只是一个不需要重构所有内容的解决方案。 - Ilnetd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接