我在VS13 - MVC 5中工作,我遇到了将数据从一个控制器方法传递到另一个控制器方法(在同一个控制器中)的问题。
这是HttpPost控制器方法中的最后一段代码,它运行正常,我已经逐步完成并验证数据是否被传递到底部的redirecttoaction方法,您可以在下面看到: / p>
...<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);
}
我在两个方法上都加了断点并逐步执行它们,如上所述第一种方法可以正常工作到最后一个redirecttoaction行,我可以在设置参数时看到数据存在。
但是一旦我进入下一个方法,每次数组值都是null?任何人都可以向我解释为什么会这样吗?我已经成功地在其他方法上使用了这个方法,我只是将一个int值传递给另一个方法。这与我无法传递数组或其他东西有关吗?或者是因为它发生在httppost方法的末尾(重定向)?
我似乎无法弄清楚出了什么问题,非常感谢所有帮助。
答案 0 :(得分:0)
答案是使用名为&#34; TempData&#34;的功能。这样你就可以将任何集合(带有对象)传递给另一个控制器方法。
我的代码更改看起来像这样,从前面提到的post方法的底部开始。
for (int i = 0; i < questionsToUse.Count; i++)
{
questionIds[i] = questionsToUse[i].QuestionId;
}
TempData["quizquestionids"] = questionIds;
return RedirectToAction("ShowQuiz");
}
我只是将我的数组传递给tempdata并给它一个我自己选择的名字。
然后我从我想要使用它的方法中提取集合并做我需要的任何事情。
[HttpGet]
public ActionResult ShowQuiz()
{
var caseToShow = new Medcase();
caseToShow.Title = "Quiz";
var questionIds = TempData["quizquestionids"] as int[];
解决问题的方法非常简单且有效。