为什么我的数组没有传递给我的其他控制器方法?

时间:2014-09-17 21:03:08

标签: methods controller asp.net-mvc-5 model-binding

我在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方法的末尾(重定向)?

我似乎无法弄清楚出了什么问题,非常感谢所有帮助。

1 个答案:

答案 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[];

解决问题的方法非常简单且有效。