在JavaScript条件语句中使用Razor语法
在index.cshtml中,我有以下类似的工作代码:在JavaScript条件语句中使用Razor语法,javascript,c#,asp.net-mvc,razor,conditional,Javascript,C#,Asp.net Mvc,Razor,Conditional,在index.cshtml中,我有以下类似的工作代码: <script type="text/javascript"> if ('@Model.SomeCondition' === 'True'){ Do Something(); } </script> 如果('@Model.SomeCondition'='True'){ 做某事; } ='True'对我来说似乎是一种奇怪的黑客行为,迫使Razor和JavaScript相处。如何重构以使用==true?这不会给
<script type="text/javascript">
if ('@Model.SomeCondition' === 'True'){
Do Something();
}
</script>
如果('@Model.SomeCondition'='True'){
做某事;
}
='True'
对我来说似乎是一种奇怪的黑客行为,迫使Razor和JavaScript相处。如何重构以使用==true
?这不会给出相同的结果。使用Razor和JavaScript可以做到这一点吗?假设SomeCondition
是一个字符串,删除引号,并使其符合JavaScript布尔值的小写形式
<script language="javascript">
// just to be clear this is javascript, not server code
if (@Model.SomeCondition.ToLowerInvariant()){
.. //
}
</script>
如果属性为
bool
,则可以按以下方式检入条件:
<script type="text/javascript">
@if (Model.SomeCondition){
@:Do Something();
}
</script>
@if(Model.SomeCondition){
@:做某事;
}
或:
@if(Model.SomeCondition){
做某事;
}
只需用c#/razor编写if语句,并在其中执行javascript即可
例如:
@if(boolVariable)
{
<script>
//javascript here
</script>
}
@if(布尔变量)
{
//javascript在这里
}
混合Razor和Javascript是个坏主意。您应该使用data-*
属性将数据与代码分开。当然,这将计算服务器代码中的布尔值,并且仅在为true时输出javascript。在某些方面,这是一个比将服务器布尔值转换为客户端布尔值更好的解决方案。如果这是您想要运行的唯一JavaScript,那么这很好,但是如果它是更大块的一部分,那么它实际上不起作用,假设这是在已声明的标记中进行的,只需使用ViewContext.Writer.Write(“JavaScript here”)。首先,这不是一个好的场景,这只是一个没有重构一切的解决方案。
<script type="text/javascript">
@if (Model.SomeCondition){
<text>
Do Something();
</text>
}
</script>
@if(boolVariable)
{
<script>
//javascript here
</script>
}