【发布时间】:2014-11-13 12:19:39
【问题描述】:
现在这让我很困扰。我有以下控制器操作方法:
public PartialViewResult ScrollEmployeeCompYear(int employeeid, string direction, int latestYearCurrentlyDisplayed)
{
List<EmployeeCompensationYear> fourYearsList = new List<EmployeeCompensationYear>();
Employee Employee = _db.Employees.Find(employeeid);
EmployeeCompensationYear compyear;
if (direction == "right")
{
int latestYearDisplayedMinusThree = latestYearCurrentlyDisplayed - 3;
for (int i = 0; i < 4; i++)
{
if ((compyear = Employee.CompensationYear.Find(m => m.Year == --latestYearDisplayedMinusThree)) != null)
{
fourYearsList.Add(compyear);
}
else
{
break;
}
}
fourYearsList.Reverse();
}
else if (direction == "left")
{
for (int i = 0; i < 4; i++)
{
if ((compyear = Employee.CompensationYear.Find(m => m.Year == ++latestYearCurrentlyDisplayed)) != null)
{
fourYearsList.Add(compyear);
}
else
{
break;
}
}
}
return PartialView(fourYearsList);
}
有两个问题,我从 Html.Ajax 帮助程序调用此方法,并且“latestYearCurrentlyDisplayed”返回 2020(我在数据库中的 employee.compensationYear)。顺便说一句,我在数据库中有这个模型从 2014 年到 2020 年的数据。
所以无论如何,第一个问题,当返回 2020 并且我得到“正确”的方向时,我正在创建一个新的 int 变量,它得到 2020-3,它应该等于 2017。然后在循环中,在 if 中,我将竞争者分配给员工的薪酬年份,其中年份等于“--latestYearDisplayedMinusThree”。这应该首先从 2017 中减去 1,然后分配它,但由于某种原因,在我的列表中的第一项中,我得到的是 2015 而不是 2016。
另一个问题是,当我“离开”并且 2015 年是我最近显示的年份时,它会进入 else if (direction == "left"),这很好,但随后它在我分配 compyear 的位置返回 null,即使我有++2015(再说一遍,我有 2014 到 2020)。
我在这里的代码中做错了吗??
【问题讨论】:
-
您的fourYearsList 中有多少项?由于您反转了fourYearsList,因此该列表中的第一项可能是循环第二次迭代的结果,即2015
-
@DavidTansey 但我是在分配,而不是比较
-
@PhuongNguyen 我认为每次我从视图“提交”到控制器时都会创建一个新的控制器实例,所以如果我反转一次提交,我认为第二次提交是独立的,因此是一个新列表为添加而创建
-
@AbdulAhmad,您的假设是正确的(创建了一个新实例)
-
@StephenMuecke 感谢您的确认
标签: c# asp.net asp.net-mvc