使用 MVC Razor 语法检查视图模型属性在 Javascript 中是不是具有值
Posted
技术标签:
【中文标题】使用 MVC Razor 语法检查视图模型属性在 Javascript 中是不是具有值【英文标题】:Check if view model property has value in Javascript using MVC Razor syntax使用 MVC Razor 语法检查视图模型属性在 Javascript 中是否具有值 【发布时间】:2016-06-19 11:16:28 【问题描述】:如果属性可以为空,如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()
检查空值,也会引发异常。
【问题讨论】:
【参考方案1】:您可以使用可空 int 变量上的HasValue
属性来确定它是否具有值,如果是,则读取该值,否则设置您想要的默认值。您可以在一个 c# 语句中执行此操作,这样您就不必担心 C# 和 javascript 之间的 True
和 true
不一致。
这应该可以正常工作。
<script>
var year = @(Model.Year.HasValue ? Model.Year.Value : 0);
alert(year);
</script>
在这里,我们将整个表达式包装为单个 C# 语句,方法是将其包装在 @(
和 )
中。所以当这个页面被加载时,razor 将运行 C# 语句并将结果值设置为你的 javascript 变量。
【讨论】:
找到了多行写入的方法。对于 Javascript,只需要像这样使用@:
:var someVar = 0;@if(Model.Year.HasValue)@:someVar = '@Model.Year.Value';else if(Model.Year2.HasValue) @:someVar = '@Model.Year2.Value';
【参考方案2】:
你可以简单地使用这个:
var year = @(@Model.Year??0)
【讨论】:
【参考方案3】:使用@Model.Year.HasValue
检查空值。
var year2 = @Model.Year.HasValue ? @Model.Year.Value : 0;
【讨论】:
这不起作用,因为在 c# 中布尔值是True
或 False
而在 Javascript 中是 true
或 false
。如果你输入@Model.Year.HasValue.ToString().ToLower()
@Kartik Jethani,它会起作用。以上是关于使用 MVC Razor 语法检查视图模型属性在 Javascript 中是不是具有值的主要内容,如果未能解决你的问题,请参考以下文章
MVC 3 Razor @model 与使用 @Model.pName 与 @Html.LabelFor(model => model.pName) 打印属性的模型