在razor视图javascript区域中,字符串和int之间没有隐式转换

时间:2018-08-19 00:26:38

标签: razor

<script type="text/javascript">
var destinationId = @(Model.DestinationId == 0?"":Model.DestinationId);
</script>

如果Model.DestinationId为0,我想输出“”,否则显示Model.DestinationId

1 个答案:

答案 0 :(得分:0)

因为您的C#代码正试图在string条件产生if时返回true,而在int(值DestinationId)时返回{{1}条件表达式返回false。编译器告诉您它无效!您需要在两种情况下都返回相同的类型。

要解决此问题,请在两种情况下返回相同的类型。您可以在ToString() type属性上使用int方法,这样您的三元表达式将始终返回相同的类型(string

var destinationId = @(Model.DestinationId == 0 ? "" : Model.DestinationId.ToString());

尽管以上内容可以解决您的编译器错误,但可能无法满足您的要求。当您的DestinationId属性值为0时,上面的代码将呈现如下内容。

var destinationId = ;

哪个会给您一个脚本错误

  

未捕获的SyntaxError:意外令牌;

,并且DestinationId属性的值非零,例如10。

var destinationId = 10;

有多种方法可以解决此问题。一种简单的方法是用JavaScript可以理解的方式替换空字符串。在下面的示例中,我将null呈现为值

var destinationId = @(Model.DestinationId == 0 ? "null" : Model.DestinationId.ToString());
if (destinationId===null) {
    console.log('value does not exist');
}
else {
    console.log('value is '+ destinationId);
}

另一种选择是简单地读取DestinationId属性值,并根据需要在JavaScript代码中检查0。

另一个选择是将整个C#表达式用单引号或双引号引起来。但是话又说回来,您的数字值将被表示为字符串:(,这不好。

我建议您使用正确的类型(即使在JavaScript中)