如果属性可以为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语法返回属性时会忽略该条件。如果使用if
和else
语句,也会发生同样的情况。
修改
如果使用@Model.Year.HasValue.ToString().ToLower()
检查空值,也会抛出异常。
答案 0 :(得分:3)
您可以使用nullable int变量上的HasValue
属性来确定它是否具有值,如果是,则读取值,否则设置所需的默认值。您可以在一个c#语句中执行此操作,这样您就不必担心C#和javascript之间的True
和true
不一致。
这应该可以正常工作。
<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)