我对以下代码感到有些困惑。它在 Windows 7 上的 VS2010 中运行良好,现在我已经将硬件升级到 Windows 8 和 VS 2012,但它没有。
我的 MVC 应用程序中有以下 JavaScript 代码:
<script language="javascript" type="text/javascript">
var today;
if("@Model.Birthday.HasValue"){
var today = new Date("@Model.Birthday.Value.Year", "@Model.Birthday.Value.Month" - 1, "@Model.Birthday.Value.Day");
}else{
today = new Date();
}
该模型是从具有如下属性的 ViewModel 中提取的:
public System.DateTime? Birthday
{
get { return user.Birthday; }
set { user.Birthday = value; }
}
在该行中抛出异常:
var today = new Date("@Model.Birthday.Value.Year", "@Model.Birthday.Value.Month" - 1, "@Model.Birthday.Value.Day");
它返回“Nullable object must have value”,如果它跳转到该行来执行它应该。但是,我的 if 语句返回错误。如果我删除该行并放入一个警报语句,它永远不会执行该行或显示警报,因为生日属性为空。JS 执行 MVC 代码的方式似乎发生了一些变化,它似乎评估了整个代码块,而不管 if 语句如何。我也尝试了以下方法,但无济于事:
- 在 Chrome for W8 中测试
- 在 try / catch 块中测试。有趣的是,它没有捕获异常(我猜 JS 不会捕获 .NET 异常)
- 通过明确声明 @Model.Birthday.HasValue == true 进行测试
- 通过将其更改为 @Model.Birthday.Value != null 进行测试
- 在调试模式下在发布模式下测试
这应该很简单 - 测试一个值是否为 null,如果不是,则从 .NET 属性创建一个 JS Date 对象,如果是,则创建一个新的 JS Date 对象,但由于某种原因,它想要评估并执行该行,即使 HasValue 为假。
真是难住了。有没有人见过这样的东西?