【发布时间】:2015-08-12 19:29:41
【问题描述】:
好的,所以我正在做一个时间报告项目,只是为了熟悉 asp.net mvc5 和数据库以及所有爵士乐。
我可以报告一个日期,但我想报告几个日期。在我的控制器中,我为此做了这个:
string d = form["date"];
string[] dates = d.Split(' ');
foreach (var date in dates)
{
if (!DateTime.TryParse(date, out reportDate))
{
ModelState.AddModelError("Date", "Felaktikt datum");
}
这是非常基本且直接的,每个日期都由一个空格分隔,我将日期添加到一个字符串数组中,并且对于该数组中的每个日期,它将执行代码。我的效果很好。
第一次运行它在第一次运行时一切正常,它报告了那个时间,但在循环中第二次我收到以下错误:Nullable object must have a value.
代码如下:
for (int i = 0; i < Projects.Count; i++)
{
reportProjects[i] = new TimeReportProject
{
Description = Projects[i].Description,
FK_ProjectID = Projects[i].ProjectId,
FK_TimeReportID = ReportId.Value,
Hours = Projects[i].Hours.Value,
HourRate = db.GetProjectHourRate(Projects[i].ProjectId, Date, Projects[i].Hours.Value),
TimeReportProjectID = Guid.NewGuid()
};
}
确切地说是Hours = Projects[i].Hours.Value,,该行第二次出现时为空。
所以为了解决这个问题,我只是做了一个非常基本的 nullcheck,现在该部分看起来像这样:
for (int i = 0; i < Projects.Count; i++)
{
var hours = Projects[i].Hours;
if (hours != null)
reportProjects[i] = new TimeReportProject
{
Description = Projects[i].Description,
FK_ProjectID = Projects[i].ProjectId,
FK_TimeReportID = ReportId.Value,
*Hours = hours.Value,
HourRate = db.GetProjectHourRate(Projects[i].ProjectId, Date, hours.Value),
TimeReportProjectID = Guid.NewGuid()
};
}
这行得通,但是在它继续运行之后,我却被以下代码卡住了:
public void AddToTimeReportProjects(TimeReportProject timeReportProject)
{
base.AddObject("TimeReportProjects", timeReportProject);
}
这是错误:
System.Data.Entity.dll 中出现“System.ArgumentNullException”类型的异常,但未在用户代码中处理
附加信息:值不能为空。
首先,我不明白为什么它在运行第二个循环以将第二个日期添加到报告时不起作用,第一个效果很好,我一直在调试,它做的一切都是一样的。
【问题讨论】: