使用 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 语法返回属性时会忽略该条件。如果使用 ifelse 语句,也会发生同样的情况。 编辑: 如果使用@Model.Year.HasValue.ToString().ToLower() 检查空值,也会引发异常。

【问题讨论】:

【参考方案1】:

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

这应该可以正常工作。

<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# 中布尔值是 TrueFalse 而在 Javascript 中是 truefalse。如果你输入@Model.Year.HasValue.ToString().ToLower()@Kartik Jethani,它会起作用。

以上是关于使用 MVC Razor 语法检查视图模型属性在 Javascript 中是不是具有值的主要内容,如果未能解决你的问题,请参考以下文章

MVC Razor 视图嵌套 foreach 的模型

MVC 3 Razor @model 与使用 @Model.pName 与 @Html.LabelFor(model => model.pName) 打印属性的模型

MVC 3 Razor 视图:从布尔模型值生成 JavaScript

使用单一视图模型在 MVC Razor 视图上发布多个表单

ASP.NET MVC Razor

MVC3 Razor - 模型和视图