0

我需要在两个操作结果之间传递一些数据,所以我想我会尝试TempData(我真的是 MVC 新手,所以请耐心等待)。这是我尝试过的:

public ActionResult Edit(Companies companies, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (file != null)
                    {
                        //Do stuff with file, save changes to database etc.

                        TempData["Companies"] = companies;

                        return RedirectToAction("bgcTest2", "Companies");

现在临时数据已存储。并检索它:

public ActionResult bgcTest2(string BolagsID, Companies companies)
        {
            try
            {
                companies = TempData["Companies"] as Companies;
                int test = companies.BolagsID;

现在问题来了;companies.BolagsID有一个值,但test始终为空。为什么?我该如何解决?

编辑:

我注意到一件相当奇怪的事情;在尝试 Darin Dimitrovs 的建议时,也可能在我尝试时,如果我只在返回空值的行上放置一个断点,它直到下一行才会中断。好像该行已被注释掉并且根本不执行。欢迎来到暮光之城。

编辑2:

取2:

[HttpPost]
        public ActionResult Edit(Companies companies, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (file != null)
                    {
                        // non related stuff

                        return RedirectToAction("bgcTest2", "Companies", new {BolagsID = companies.BolagsID});

和:

[Authorize]
        public ActionResult bgcTest2(int BolagsID)
        {
            try
            {
                int test = BolagsID;

我仍然得到“当前上下文中不存在测试”。

编辑3:

拿2个工作正常。我的变量null在声明时是因为我从未在任何地方使用过它们。我想我会一步一步来,但显然,在某些情况下,你必须采取几个步骤才能看到它们中的任何一个都有效。

经验教训:一定要使用声明的变量,否则它们将是null.

4

1 回答 1

3

我建议您不要使用 TempData,因为它依赖于 Session。如果您只需要这个BolagsID,那么只需将其作为参数传递:

public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
    if (ModelState.IsValid)
    {
        try
        {
            if (file != null)
            {
                //Do stuff with file, save changes to database etc.
                return RedirectToAction("bgcTest2", "Companies", new { BolagsID = companies.BolagsID });

进而:

public ActionResult bgcTest2(int bolagsID)
{
    ... use the bolagsID here directly
}

不幸的是,您不能使用这种方法传递复杂的对象。但是您可以将此对象持久保存在您的数据存储中,并仅将 id 传递给目标控制器操作,这将允许您在重定向后从该数据存储中检索它。

于 2013-05-16T06:16:30.337 回答