我对以下代码感到有点难过.它在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();
}
Run Code Online (Sandbox Code Playgroud)
Model正在从具有如下属性的ViewModel中提取:
public System.DateTime? Birthday
{
get { return user.Birthday; }
set { user.Birthday = value; }
}
Run Code Online (Sandbox Code Playgroud)
抛出异常:
var today = new Date("@Model.Birthday.Value.Year", "@Model.Birthday.Value.Month" - 1, "@Model.Birthday.Value.Day");
Run Code Online (Sandbox Code Playgroud)
它返回"Nullable对象必须具有值",如果它在该行中跳转以执行它应该返回.但是,我的if语句返回false.如果我删除该行并只是放入一个警告语句,它永远不会执行该行或显示警报,因为Birthday属性为null.似乎JS在执行MVC代码方面有所改变,似乎无论if语句如何,它似乎都在评估整个代码块.我也试过以下,但无济于事:
这应该很简单 - 测试一个值是否为null,如果不是,则从.NET属性创建一个JS Date对象,如果是,则创建一个新的JS Date对象,但由于某种原因,它想要评估并执行该行,即使HasValue为false.
真的很难过.有没有人见过这样的东西?