【发布时间】:2016-01-24 03:08:10
【问题描述】:
我在 VS13 - MVC 5 中工作,在将数据从一个控制器方法传递到另一个控制器方法(在同一个控制器中)时遇到问题。
这是 HttpPost 控制器方法中运行良好的最后一段代码,也就是说,我已经单步执行并验证了数据正在传递到底部的 redirecttoaction 方法中,您可以在下面看到:
...<irrelevant code that works fine on top>...
int[] idArray = new int[questionsToUse.Count];
for (var i=0; i<questionsToUse.Count; i++)
{
idArray[i] = questionsToUse[i].QuestionId;
}
return RedirectToAction("ShowQuiz", new { array = idArray });
}
这是被重定向到的控制器方法:
[HttpGet]
public ActionResult ShowQuiz(int[] array)
{
var caseToShow = new Medcase();
caseToShow.Title = "Quiz";
caseToShow.Questions = new List<Question>();
for (var i = 0; i < array.Count(); i++)
{
caseToShow.Questions.Add(db.Questions.Find(i));
}
return View(caseToShow);
}
我在这两种方法上都设置了断点并逐步执行它们,如前所述,第一种方法可以正常工作到最后一个重定向操作行,在那里我可以在设置参数时看到数据。
但是一旦我进入下一个方法,数组值每次都只是 null 吗?谁能向我解释这是为什么?我已经在其他方法上成功地使用了这个方法,我只是将一个 int 值传递给另一个方法。这与我无法传递数组或其他东西有关吗?还是因为它发生在 httppost 方法的末尾(重定向)?
我似乎无法弄清楚出了什么问题,非常感谢所有帮助。
【问题讨论】:
-
我发现这是因为我将它放在一个数组中,当我传递一个值时它工作正常......谁能告诉我是否有一种我可以使用的集合可以转让吗?
-
我发现了如何使用“TempData”解决这个问题。
-
您无法传递复杂类型,因为您正在执行重定向。这不像调用一个方法。您必须序列化数据才能传递数组。
-
可以使用 TempData 方法发送对象列表,并且它现在正在工作,所以......是的,我可以。
-
是的,使用 tempdata 是可能的,而不是像您在问题中尝试的那样通过路由值..
标签: methods controller asp.net-mvc-5 model-binding