我在javascript块中使用以下Razor语句但得到“True is undefined”运行时错误。 @Request.IsLocal呈现为布尔值True。谢谢。
<script type="text/javascript">
var test;
if (@Request.IsLocal || @Request.IsLocal == 'True')
{
test = 'local';
}
else
{
test = 'not loccal'
}
alert(test);
</script>
答案 0 :(得分:1)
True
不是javascript布尔值。它是true
尝试以下
<script type="text/javascript">
var test;
if ("@(Request.IsLocal)" == 'True')
{
test = 'local';
}
else
{
test = 'not loccal'
}
alert(test);
</script>
OR
<script type="text/javascript">
var test;
if (@Request.IsLocal.ToString().ToLowerInvarient())
{
test = 'local';
}
else
{
test = 'not loccal'
}
alert(test);
</script>
答案 1 :(得分:0)
当剃刀执行当前代码时,它会产生如下所示的输出
var test;
if (True || True == 'True')
{
test = 'local';
}
else {
test = 'not loccal';
}
假设Request.IsLocal
返回true
。
浏览器会尝试执行此操作。现在javascript框架认为True
是一个js变量,但它没有在任何地方定义。它不是布尔true
( javascript区分大小写)。所以浏览器会抱怨
未定义True
您只需切换到在服务器上执行的三元运算符表达式并将值返回到测试变量即可简化代码。
这应该有效
<script type="text/javascript">
var test= '@(Request.IsLocal?Html.Raw("local"):Html.Raw("not local"))';
alert(test);
</script>
如果您检查页面的查看源,您可以看到没有if条件,因为它们在服务器上执行。