Asp.net mvc 为什么要将当前月份和年份作为DateTime的默认值?

Asp.net mvc 为什么要将当前月份和年份作为DateTime的默认值?,asp.net-mvc,datetime,Asp.net Mvc,Datetime,我正在浏览我正在处理的一个项目的代码库,我在控制器中有一个方法,它通过用月份和年份填充一个列表来设置视图,然后将它传递给视图 ViewBag.ListOfYears = new SelectList(years, person.Date_of_Graduation.GetValueOrDefault().Year.ToString("00")); ViewBag.ListOfMonths = new SelectList(months, person.Date_of_Graduation.Ge

我正在浏览我正在处理的一个项目的代码库,我在控制器中有一个方法,它通过用月份和年份填充一个列表来设置视图,然后将它传递给视图

ViewBag.ListOfYears = new SelectList(years, person.Date_of_Graduation.GetValueOrDefault().Year.ToString("00"));

ViewBag.ListOfMonths = new SelectList(months, person.Date_of_Graduation.GetValueOrDefault().Month.ToString("00"));

但当我查看实际页面上的下拉列表时,默认情况下选择06作为月份,默认情况下选择2015作为年份。我认为DateTime对象的默认值是1表示月份,0001表示年份。有人能给我解释一下为什么当前月份和年份是dropbox中的默认值吗?

对于要将此选择列表绑定到的任何属性,
person.Date\u of\u Gradication
的值不是null,或者在
ModelState
中有一个值。例如,假设:

@Html.DropDownListFor(m => m.GraduationYear, (SelectList)ViewBag.ListOfYears)

然后,如果为任何
ViewBag.GraduationYear
ViewData[“GraduationYear”]
请求[“GraduationYear”]
,或
Model.GraduationYear
(其中
Model
是视图的模型实例)设置了值,然后,该值将被设置为下拉列表中的选定值。

您还没有告诉我们遇到此问题时,
person.Date\u of\u grading.GetValueOrDefault()
的值是多少。它实际上是
default(DateTime)
还是本月的一个日期?还有,毕业日期的类型是什么?它肯定是
日期时间吗?
而不是某种自定义类型?关于DateTime的默认值,您是对的(尽管我假设您已经通过test或google确认了这一点,并且您的评论是修辞性的)。@Chris Um,Date_of_gradication的类型为Nullable,值为person.Date_of_gradication.GetValueOrDefault()是2015年1月6日凌晨12:00:00,那么几乎可以肯定的是,
毕业日期
不是空的。检查
毕业日期.HasValue
是否为真(我希望是真的)。同样地,
毕业日期。值可能就是该日期。所以你在错误的地方寻找你的bug。事实上,您的错误在于日期是在您不期望的情况下设置的,而不是默认值不是您期望的。遗憾的是,这有点超出了这个问题的范围,因为我不知道您的代码是做什么的,它保存东西的位置等等。我的第一个检查是创建一个新的人并检查数据库(或者无论您在哪里持久化它)查看它在开始时是否存在。如果是,则应该缩小范围。如果不是,则只需在代码中查找您设置该值的所有位置,并尝试确定是否在那里设置该值(使用属性设置器的断点很有帮助)。或者,如果在对象的所有保存上都有存储库类型的模式断点。@克里斯:是的,我实际上发现,由于某种原因,创建Person对象时,它会将毕业日期设置为现在。谢谢!