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

时间:2016-06-19 11:16:28

标签: javascript c# asp.net-mvc razor

如果属性可以为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>

由于某种原因,使用razor语法返回属性时会忽略该条件。如果使用ifelse语句,也会发生同样的情况。

修改
如果使用@Model.Year.HasValue.ToString().ToLower()检查空值,也会抛出异常。

3 个答案:

答案 0 :(得分:3)

您可以使用nullable int变量上的HasValue属性来确定它是否具有值,如果是,则读取值,否则设置所需的默认值。您可以在一个c#语句中执行此操作,这样您就不必担心C#和javascript之间的Truetrue不一致。

这应该可以正常工作。

<script>

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

</script>

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你可以简单地使用它:

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