使用MVC Razor语法检查视图模型属性在Javascript中是否有值
如果属性可以为null,如使用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
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';}