使用MVC Razor语法检查视图模型属性在Javascript中是否有值

使用MVC Razor语法检查视图模型属性在Javascript中是否有值,javascript,c#,asp.net-mvc,razor,Javascript,C#,Asp.net Mvc,Razor,如果属性可以为null,如int?,bool?等,如何从Javascript中的视图模型中获取值 我很容易地检查属性是否有值,直到我返回它的值为止 <script type="text/javascript"> // Works as expected var year = !!'@Model.Year' ? 1994 : 0; // Null reference exceptin thrown var year2 = !!'@Model.Year

如果属性可以为null,如
int?
bool?
等,如何从Javascript中的视图模型中获取值
我很容易地检查属性是否有值,直到我返回它的值为止

<script type="text/javascript">

    // Works as expected
    var year = !!'@Model.Year' ? 1994 : 0;

    // Null reference exceptin thrown
    var year2 = !!'@Model.Year' ? @Model.Year.Value : 0;

</script>

//工作如期进行
变量年份=!!'@车型。年份'?1994 : 0;
//引发空引用异常
变量第2年=!!'@车型。年份'@Model.Year.Value:0;
由于某些原因,在使用razor语法返回属性时忽略该条件。如果使用
if
else
语句,也会发生同样的情况。

编辑:

如果使用
@Model.Year.HasValue.ToString().ToLower()
检查空值,也会引发异常。

使用
@Model.Year.HasValue
检查空值

var year2 = @Model.Year.HasValue ? @Model.Year.Value : 0;

使用
@Model.Year.HasValue
检查空值

var year2 = @Model.Year.HasValue ? @Model.Year.Value : 0;

可以对可为null的int变量使用
HasValue
属性来确定它是否有值,如果有,读取值,否则设置所需的默认值。您可以在一个c#语句中实现这一点,这样您就不必担心c#和javascript之间的
True
True
不一致

这应该行得通

<script>

    var year = @(Model.Year.HasValue ? Model.Year.Value : 0);
    alert(year);

</script>

var year=@(Model.year.HasValue?Model.year.Value:0);
警报(年);

在这里,我们将整个表达式包装为单个C#语句,方法是将其包装为
@(
。因此,当加载此页面时,razor将运行C#语句并将结果值设置为javascript变量。

您可以使用可为null的int变量的
HasValue
属性来确定它是否有值,如果有,读取值,否则设置所需的默认值。您可以在一个c#语句中实现这一点,这样您就不必担心c#和javascript之间的
True
True
不一致

这应该行得通

<script>

    var year = @(Model.Year.HasValue ? Model.Year.Value : 0);
    alert(year);

</script>

var year=@(Model.year.HasValue?Model.year.Value:0);
警报(年);

在这里,我们将整个表达式包装为单个C#语句,方法是将其包装为
@(
。因此,当加载此页面时,razor将运行C#语句并将结果值设置为javascript变量。

您可以简单地使用以下命令:

var year = @(@Model.Year??0)

您可以简单地使用:

var year = @(@Model.Year??0)

这在c中不起作用,布尔值为
True
False
,而在Javascript中为
True
False
。如果你把
@Model.Year.HasValue.ToString().ToLower()
@Kartik-Jethani,它就可以工作了。这不会像在c中那样工作,布尔值是
True
False
,而在Javascript中是
True
False
。如果你把
@Model.Year.HasValue.ToString().ToLower()
@Kartik-Jethani.找到了一种写多行的方法,它就会起作用。对于Javascript,只需要像这样使用
@:
var someVar=0@if(Model.Year.HasValue){@:someVar='@Model.Year.Value';}else if(Model.Year2.HasValue){@:someVar='@Model.Year2.Value';}
找到了一种多行写入的方法。对于Javascript,只需要像这样使用
@:
var someVar=0@if(Model.Year.HasValue){@:someVar='@Model.Year.Value';}其他if(Model.Year2.HasValue){@:someVar='@Model.Year2.Value';}